![设计模式就该这样学:基于经典框架源码和真实业务场景](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=1739297413-wax9Vzr3VhB8ctnXi6AS4Opxq5XnVU0X-0-63b31c852eb020b02bd13f3e38637f16)
然后分别创建子工厂,JavaCourseFactory类的代码如下。
![img](https://epubservercos.yuewen.com/A1F36C/17725769807799506/epubprivate/OEBPS/Images/txt008_5.jpg?sign=1739297413-Q7RZCZ3Uy5BI0AqSJCWMEJKecq4k06bx-0-f52cade4deb9b78ac67acbd5d262e588)
PythonCourseFactory类的代码如下。
![img](https://epubservercos.yuewen.com/A1F36C/17725769807799506/epubprivate/OEBPS/Images/txt008_6.jpg?sign=1739297413-B5gCPfyy5BPM9k3ld8GOpiw57LvEfjtv-0-787de66b2ce453fed648916f4272a085)
客户端测试代码如下。
![img](https://epubservercos.yuewen.com/A1F36C/17725769807799506/epubprivate/OEBPS/Images/txt008_7.jpg?sign=1739297413-1PQfZM08Yqm2V8hFEnPHAySMl8FDtQzg-0-3fb4309ef1a20a53730c97877135f0c6)
最后看如下图所示的类图。
![img](https://epubservercos.yuewen.com/A1F36C/17725769807799506/epubprivate/OEBPS/Images/txt008_8.jpg?sign=1739297413-DHOIaTDNMoc2OMtyLXwysoh641hOsr3M-0-5e61875686d76ed218603be0a1f83a58)