![设计模式就该这样学:基于经典框架源码和真实业务场景](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=1738973602-HurACroPAKpLXAltspncPP5lPDAQS1Lz-0-dff92c629b0a9e303cf943e0101ca9a7)
然后分别创建子工厂,JavaCourseFactory类的代码如下。
![img](https://epubservercos.yuewen.com/A1F36C/17725769807799506/epubprivate/OEBPS/Images/txt008_5.jpg?sign=1738973602-gAekjwHBKOYoZRaJV5GdgjI3OsHIDdk0-0-62707e4807c06752126728c98fe006c5)
PythonCourseFactory类的代码如下。
![img](https://epubservercos.yuewen.com/A1F36C/17725769807799506/epubprivate/OEBPS/Images/txt008_6.jpg?sign=1738973602-FR2e5vdziGTrQkm8gw09a2TS5QtHrhZG-0-d7e883de0855932488ae6be9921c95a4)
客户端测试代码如下。
![img](https://epubservercos.yuewen.com/A1F36C/17725769807799506/epubprivate/OEBPS/Images/txt008_7.jpg?sign=1738973602-nd3rurowK2E8Ju1pQ8anGv1K74GIacUI-0-5ce40b29a53d1a64477e011e69a78ce0)
最后看如下图所示的类图。
![img](https://epubservercos.yuewen.com/A1F36C/17725769807799506/epubprivate/OEBPS/Images/txt008_8.jpg?sign=1738973602-tjDvhTrdsNc4dowtTD2YSjSZfofJiPey-0-df819845c6ca2131121fd1f1bb054213)