ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 工厂方法模式 ### 又称工厂模式,是对简单工厂模式的进一步抽象化,其好处是可以使用系统在不修改原来代码的情况下引进新的产品,即满足开闭原则 ### 通过工厂类定义负责创建产品的公共接口,通过子类来确定所需要创建的类型 ### 相比简单工厂而言,此种方法具有更多的可扩展性和复用性,同时也增强了代码的可读性 ### 将类的实例化(具体产品的创建)延迟到了工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化哪一个类 ### ## 核⼼组成 ### 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)