JAVA设计模式之工厂系列(factory)
2020-04-28 16:09:01来源:博客园 阅读 ()
JAVA设计模式之工厂系列(factory)
任何可以产生对象的方法或者类,都可以称之为工厂。单例就是所谓的静态工厂。
为什么jdk中有了new,还需要工厂呢?
a、灵活的控制生产过程
b、给对象加修饰、或者给对象加访问权限,或者能够在对象生产过程中添加一些日志信息,再或者根据应用场景添加一些实际的业务处理等等。
1、静态工厂
单例模式:一种特殊的静态工厂,请参考单例模式
2、简单工厂
/** * 可移动的物体抽象接口
*/
public interface Moveble { }
/**
* 食品抽象类
*/
public abstract class Food{
}
/**
* 面包类
*/
public class bread extends Food {
public Bike(){
System.out.println("T am bread");
}
}
/** * bike类 */ public class Bike implements Moveble{ public Bike(){ System.out.println("T am bike"); } }
/** * car类 */ public class Car implements Moveble{ public Car(){ System.out.println("I am car"); } }
/** * 简单工厂 只要是类都可以生产 */ public class SimplerFactory { public Moveble createCar(){ return new Car(); } public Moveble createBike(){ return new Bike(); }
public Food createBread(){
return new Bread();
}
}
/** * 测试类 */ public class T { public static void main(String[] args) { //生产car Moveble car = new SimplerFactory().createCar(); //生产bike Moveble bike = new SimplerFactory().createBike();
//生产bike
Food bread = new SimplerFactory().createBread();
}
}
3、工厂方法
/** * 可移动的物体抽象接口 */ public abstract interface Moveble { } /** * 食品抽象类 */ public abstract class Food { } /** * bike类 */ public class Bike implements Moveble{ public Bike(){ System.out.println("T am bike"); } } /** * car类 */ public class Car implements Moveble{ public Car(){ System.out.println("I am car"); } } /** * bread类 */ public class Bread extends Food{ public Bread(){ System.out.println("T am bread"); } } /** * bike工厂 */ public class BikeFactory { public Moveble create(){ return new Bike(); } } /** * car工厂 */ public class CarFactory { public Moveble create(){ return new Car(); } } /** * bread工厂 */ public class BreadFactory { public Food create(){ return new Bread(); } } /** * 测试类 ,工厂方法 一种类一个工厂 */ public class T { public static void main(String[] args) { //生产car Moveble car = new BikeFactory().create(); //生产bike Moveble bike = new CarFactory().create(); //生产bread Food bread = new BreadFactory().create(); } }
4、抽象工厂
/** * 食品抽象类 */ public abstract class Food { } /** * 交通工具抽象类 */ public abstract class Transportation { } /** * 电子设备抽象类 */ public abstract class Electronic { } /** * bread类 */ public class Bread extends Food { public Bread(){ System.out.println("T am bread"); } } /** * plane类 */ public class Plane extends Transportation{ public Plane(){ System.out.println("I am plane"); } } /** * phone类 */ public class Phone extends Electronic{ public Phone(){ System.out.println("I am phone"); } } /** * 具体的工厂 可以生产一组类 */ public class HaierFactory extends AbstractFactory{ Food createFood() { return new Bread(); } Electronic createElectronic() { return new Phone(); } Transportation createTransportation() { return new Plane(); } } /** * cake类 */ public class Cake extends Food { public Cake(){ System.out.println("T am cake"); } } /** * Tank类 */ public class Tank extends Transportation{ public Tank(){ System.out.println("I am tank"); } } /** * Computer类 */ public class Computer extends Electronic{ public Computer(){ System.out.println("T am pc"); } } /** * 具体的工厂,可以生产一组类 */ public class SuningFactory extends AbstractFactory{ Food createFood() { return new Cake(); } Electronic createElectronic() { return new Computer(); } Transportation createTransportation() { return new Tank(); } } /** * 测试类,抽象工厂可以生产一组类,并且可以很灵活的扩展一组类的创建过程,但是不能做到灵活扩展一种类 */ public class T { public static void main(String[] args) { //海尔工厂可以生产面包 飞机 手机 AbstractFactory haierFactory = new HaierFactory(); Food bread = haierFactory.createFood(); Transportation plane = haierFactory.createTransportation(); Electronic phone = haierFactory.createElectronic(); //苏宁工厂可以生产 蛋糕 坦克 pc电脑 AbstractFactory suningFactory = new SuningFactory(); Food cate = haierFactory.createFood(); Transportation tank = haierFactory.createTransportation(); Electronic computer = haierFactory.createElectronic(); } }
5、Spring的bean工厂
既可以灵活控制一组类的创建过程也可以灵活控制一种类的创建过程,具体请去阅读Spring源码中的BeanFactory。
原文链接:https://www.cnblogs.com/sx-bj-srr/p/12797475.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash