在工厂模式属于 创建型模式,该设计模式的核心思想是 解耦
何为解耦:平时创建对象通过new关键字来实现,如果更换对象,涉及到的对象都要进行一次改变,
如果采用工厂模式,只需要和工厂进行交互,达到和对象解耦,如果需要更换对象,在工厂里更换对象即可。
工厂模式三种写法
简单工厂模式(Simple Factory Pattern):产品的工厂
1、由一个工厂对象决定创建出哪一种产品类的实例
2、简单工厂模式不属于GOF23种设计模式
3、简单工厂适用于工厂类负责创建的对象比较少的情形,对象变化较少的场景。
4、源码:Calendar类的getInstance()方法
5、缺点:工厂类责任重大,不方便扩展,不适合构建产品结构复杂的产品
工厂方法模式(Factory Method Pattern):工厂的工厂
1、定义一个创建对象的接口,通过接口实现去确定实例化哪个类
2、符合设计原则的开闭原则,用户只需关注产品对应的工厂,无需关注细节
3、源码:slf4j的ILoggerFactory类
4、缺点:类的数量增多,增加系统的理解复杂度
抽象工厂模式(Abastract Factory Pattern):复杂产品的工厂
1、创建一系列相关或相互依赖对象的接口,无需指定具体的类
2、所有的产品以同样的接口出现,使客户端不依赖具体的实现
3、源码:Spring很多地方都用到了抽象工厂
4、缺点:规定了产品的标准,扩展相对困难,需要修改抽象工厂接口
工厂模式总结
1、简单工厂和工厂方法本质上其实是差不多的,如果对于产品的数量或者类型是确定的,产品个数相对比较少的情况下,推荐使用。
2、抽象工厂用来解决相对复杂的产品问题,适用于大量对象的生产创建等。