## 工厂方法模式
###
又称工厂模式,是对简单工厂模式的进一步抽象化,其好处是可以使用系统在不修改原来代码的情况下引进新的产品,即满足开闭原则
###
通过工厂类定义负责创建产品的公共接口,通过子类来确定所需要创建的类型
###
相比简单工厂而言,此种方法具有更多的可扩展性和复用性,同时也增强了代码的可读性
###
将类的实例化(具体产品的创建)延迟到了工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化哪一个类
###
## 核⼼组成
###
IProduct:抽象产品类,描述所有实例所共有的公共接口
Product:具体产品类,实现抽象产品类的接⼝,⼯⼚类创建对象,如果有多个需要定义多个
IFactory:抽象⼯⼚类,描述具体⼯⼚的公共接⼝
Factory:具体⼯场类,实现创建产品类对象,实现抽象⼯⼚类的接⼝,如果有多个需要定义多个
###
![](https://img.kancloud.cn/7b/89/7b898a28c2f2fdcd8601e35df2df8038_733x336.png)
###
## 优点:
###
符合开闭原则,增加⼀个产品类,只需要实现其他具体的产品类和具体的⼯⼚类;
符合单⼀职责原则,每个⼯⼚只负责⽣产对应的产品
使⽤者只需要知道产品的抽象类,⽆须关⼼其他实现类,满⾜迪⽶特法则、依赖倒置原则和⾥⽒替换原则
迪⽶特法则:最少知道原则,实体应当尽量少地与其他实体之间发⽣相互作⽤
依赖倒置原则:针对接⼝编程,依赖于抽象⽽不依赖于具体
⾥⽒替换原则:俗称LSP, 任何基类可以出现的地⽅,⼦类⼀定可以出现, 对实现抽象化的具体步骤的规范
###
## 缺点:
###
增加⼀个产品,需要实现对应的具体⼯⼚类和具体产品类;
###
## 具体实现(云效代码study-java项目当中设计模式当中有代码案例)
###
先来看抽象支付接口和具体支付类:
###
![](https://img.kancloud.cn/d6/b3/d6b3b6205abd3c50eedf5d7e8514f636_1888x962.png)
###
再来看抽象工厂接口和具体工厂类:
###
![](https://img.kancloud.cn/de/01/de018fa40a2d57da3de772d3e1aa4c45_1875x947.png)
###
![](https://img.kancloud.cn/a7/1b/a71b163d59208d8aad6c0a237b446106_1124x681.png)
- 设计模式六大原则
- 常见的三大设计模式分类
- 创建型模式之单例模式
- 单例模式之懒汉
- 单例模式之饿汉
- 单例模式之如何选择懒汉饿汉
- 什么情况下使用单例模式
- 创建型模式之工厂模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 创建型模式之原型模式
- 创建型模式之建造者模式
- 结构型模式之适配器模式
- 接口的适配器模式
- 类的适配器模式
- 结构型模式之桥接模式
- 结构型模式之桥接模式和适配器模式的区别
- 结构型模式之装饰器模式
- 结构型模式之代理模式
- 结构模式之外观模式
- 结构模式之享元模式
- 行为模式之策略模式
- 行为模式之模板模式
- 行为模式之观察者模式
- 行为模式之责任链模式
- 行为模式之命令模式
- 行为模式之迭代器模式
- 行为模式之备忘录模式
- 行为模式之状态模式