大话设计模式之_工厂模式

来源:互联网 发布:软件著作权 专利权 编辑:程序博客网 时间:2024/05/22 13:41

大话设计模式之_工厂模式

  • 工程方法(即简单工厂模式simpleFactory,或静态工厂方法 static factory method

  • 抽象工厂

什么是工厂呢?

工程模式是我们最常用的设计模式,在很多开源框架里头可以说工程模式是遍地开花呀,当然你如果你有兴趣写一个开源框架那么还得掌握:注解、反射机制,这个小笔笔会在后面跟大家分享吐槽。给大家附上:笔者曾经写的一个app的下拉刷新和加载更多的框架(由于涉及到公司的安全协议,这里给大家分享实现的思路和部分核心代码)

言归正传:工厂模式是我们最常用的实例化对象模式,通俗的说就是用工厂方法替代new操作一种设计模式

1.工厂方法

核心思想就只要记住一句话:有一个抽象的Factory类(可以是抽象类和接口)这个类不负责在具体的产品生产,而是制定一种规范,具体的生产由其子类去完成

ps:如果你理解上面这句话了,那么就说明你已经掌握了过程设计模式的精髓了,现在你已经成功了80%了,别担心,剩下的20%我给大家贴个demo就一目了然了

//1.定义接口public interface People{public void say();}//2.1接口的实现类public void Chinese implements People{public void say(){system.out.printfln("中国话");}}//2.2接口的实现类public void Amercia implements People{public void say(){system.out.printfln("英语");}}//3.工厂类,制定规范public class People_Factory{//方法的返回值,用到了多态public static People create(int type){if(type ==1){return new Chinese();}else if(type ==2){return new Amercia();}}}//4.演示效果public class TestFactory{public static void main(String[]args){People p = People_Factory.create(1);p.say();People p = People_Factory.create(2);p.say();}}

2.抽象工厂

抽象工厂模式是工厂方法模式的升级版,它是用来创建一组相关或者相互依赖的对象。(又是很精辟的一句话,此处高能好好品味)

是不是有点难以理解?那就看下他们的区别对比下不同点,然后就知道抽象工厂是什么了。工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是对对个产品等级结构。

在编码中,通常一个产品结构为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或者抽象类的,而抽象工厂模式所提供的产品则是衍生自不同的接口或者抽象类。

在抽象工厂模式中,有一个产品族的概念(即位于不同产品等级结构中功能相关联的产品组成的家族)。抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。

下面以生产汽车的例子讲述抽象工厂

2.0排量两车厢、2.3排量两车厢:属同一等级结构

2.0排量两车厢、2.0排量三车厢:属同一个产品族

ps:老规矩上代码,讲了一大通还是代码直观点

//1.1定义产品1接口public IProduct1{public void show();}//1.2定义产品2接口public IProduct2{public void show();}//2.1实现定义的接口class Product1 implements IProduct1{public void show(){system.out.println("这是产品1");}}//2.2实现定义的接口class Product2 implements IProduct2{public void show(){system.out.println("这是产品2");}}//3抽象工厂的接口interface IFactory{public IProduct1 createProduct1();public IProduct2 createProduct2();}//4抽象工厂的实现类class MyFactory implements IFactory{public IProduct1 createProduct1(){return new Product1();}public IProduct2 createProduct2(){return new Product2();}}//5如何使用public class Client{public static void main(String[]args){IFactory factory = new MyFactory();factory.createProduct1().show();factory.createProduct1().show();}}

总结

如果工厂的产品全部属于同一个等级结构,则属于工厂方法模式;如果工厂的产品来自多个等级结构,则属于抽象工厂模式。

2 0
原创粉丝点击