![设计模式就该这样学:基于经典框架源码和真实业务场景](https://wfqqreader-1252317822.image.myqcloud.com/cover/758/33114758/b_33114758.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
6.2 使用工厂方法模式实现产品扩展
工厂方法模式主要解决产品扩展的问题,在简单工厂中,随着产品链的丰富,如果每个课程的创建逻辑都有区别,则工厂的职责会变得越来越多,有点像万能工厂,并不便于维护。根据单一职责原则,我们将职能继续拆分,专人干专事。Java课程由Java工厂创建,Python课程由Python工厂创建,对工厂本身也做抽象。首先创建ICourseFactory接口。
![img](https://epubservercos.yuewen.com/A1F36C/17725769807799506/epubprivate/OEBPS/Images/txt008_4.jpg?sign=1738983470-ei4H2b8dfPyVECqaYwfa7N9UZ9ZZt7Ug-0-9706847cf967eb46a9661522c903c839)
然后分别创建子工厂,JavaCourseFactory类的代码如下。
![img](https://epubservercos.yuewen.com/A1F36C/17725769807799506/epubprivate/OEBPS/Images/txt008_5.jpg?sign=1738983470-8VRARCNnRhBRXTAzODWjdhBqz0f8Y6t2-0-91cb36553fcf95636aa525d68d62a4af)
PythonCourseFactory类的代码如下。
![img](https://epubservercos.yuewen.com/A1F36C/17725769807799506/epubprivate/OEBPS/Images/txt008_6.jpg?sign=1738983470-flFO9Aq4zmZ71Wl2XFoi0eyqjOcEijQG-0-fa873b9ed587ea79a03ad713ed219c30)
客户端测试代码如下。
![img](https://epubservercos.yuewen.com/A1F36C/17725769807799506/epubprivate/OEBPS/Images/txt008_7.jpg?sign=1738983470-Q3tY1z2MkwF4lcXo9ZN8ANHwCtNRzlWR-0-631c74332120a53e8e20d2e521de6bf4)
最后看如下图所示的类图。
![img](https://epubservercos.yuewen.com/A1F36C/17725769807799506/epubprivate/OEBPS/Images/txt008_8.jpg?sign=1738983470-S7e2n6UQWyoLTmwsC6oNVRnZwXcd1uke-0-4f0311ba5084bfa3f3c60d7ef1554ee9)