设计模式-工厂模式详解(非抽象工厂模式)
2017-07-25 10:52
141 查看
工厂模式分为三种
第一种:普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
我们来看个小例子(关于笔和写的案例)
首先我们写一个接口类,里面定义一个写的方法:
然后我们来看实现类:
第二种,多工厂模式:就是对工厂方法进行改进,提供多个工厂方法,分别创建对象。
修改WriteFactory如下:
第三种,静态工厂模式:修改工厂类里面的方法,把所有方法都变成静态的,这样,调用工厂方法的时候不需要创建实例就可以了。
总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且有共同的接口时,可以通过工厂模式方法进行创建。上述三那种模式中,第一种如果字符串输错了,会导致实例创建不成功,第三种相对于第二种不要创建工厂方法实例,所以,大多数情况下,推荐使用第三种静态工厂模式。
第一种:普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
我们来看个小例子(关于笔和写的案例)
首先我们写一个接口类,里面定义一个写的方法:
public interface Writer { public void write(); }
然后我们来看实现类:
public class GangBi implements Writer { @Override public void write() { // to do something } }
public class MaoBi implements Writer { @Override public void write() { // to do something } }然后创建工厂类:
public class WriteFactory { // 简单工厂模式,弊端:如果字符串输错,实例就创建不成功 public Writer produce(String type) { if ("gb".equals(type)) { return new GangBi(); } else if ("mb".equals(type)) { return new MaoBi(); } else { return null; } } }测试类:
public class FactoryTest { public static void main(String[] args) { WriteFactory factory = new WriteFactory(); Writer write = factory.produce("mb"); write.write(); } }上面是简单工厂模式,上面注释也说了,如果输入的字符串有错,则不能正确常见对象,并且这种方法也并不友好,所以这种工厂模式不推荐使用。
第二种,多工厂模式:就是对工厂方法进行改进,提供多个工厂方法,分别创建对象。
修改WriteFactory如下:
public class WriteFactory { public Writer produceGb() { return new GangBi(); } public Writer produceMb() { return new MaoBi(); } }测试类:
public class FactoryTest { public static void main(String[] args) { WriteFactory factory = new WriteFactory(); Writer write = factory.produceMb(); write.write(); } }这种方法避免了上面讲的问题。
第三种,静态工厂模式:修改工厂类里面的方法,把所有方法都变成静态的,这样,调用工厂方法的时候不需要创建实例就可以了。
public class WriteFactory { public static Writer produceGb() { return new GangBi(); } public static Writer produceMb() { return new MaoBi(); } }测试类:
public class FactoryTest { public static void main(String[] args) { Writer write = WriteFactory.produceMb(); write.write(); } }
总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且有共同的接口时,可以通过工厂模式方法进行创建。上述三那种模式中,第一种如果字符串输错了,会导致实例创建不成功,第三种相对于第二种不要创建工厂方法实例,所以,大多数情况下,推荐使用第三种静态工厂模式。
public class WriteFactory { public static Writer produceGb() { return new GangBi(); } public static Writer produceMb() { return new MaoBi(); } }
相关文章推荐
- [设计模式] - No.1 详解简单工厂模式、工厂模式和抽象工厂模式
- 【设计模式】工厂模式(静态工厂模式、工厂方法模式、抽象工厂模式)
- 《Head First 设计模式》学习笔记——工厂模式 + 抽象工厂模式
- 设计模式详解——工厂模式(三)
- 设计模式(3)-抽象工厂模式详解(易懂)
- 设计模式学习(二)简单工厂模式-工厂模式-抽象工厂模式
- c++设计模式——工厂模式详解
- 浅学设计模式之简单工厂模式、工厂模式、抽象工厂模式
- 设计模式之简单工厂模式、工厂模式、抽象工厂模式
- 设计模式第二话——工厂模式和抽象工厂模式
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
- 设计模式第三篇 工厂模式(2) 抽象工厂模式 abstract factory
- Java设计模式之静态工厂模式详解
- 设计模式(一)简单工厂模式工厂模式 抽象工厂模式详解
- 设计模式之简单工厂模式,工厂模式,抽象工厂模式学习总结
- 设计模式-6.简单工厂模式、工厂模式、抽象工厂模式
- java设计模式 (1) 工厂模式,抽象工厂模式,单子模式
- C++设计模式之1-工厂模式(简单工厂模式-工厂方法模式-抽象工厂模式)
- 设计模式学习(二)——简单工厂模式、工厂模式、抽象工厂模式
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)