标签:创建 Factory 工厂 实例 design 创建对象 com Method 客户端
一、简单工厂
定义一个工厂类,根据传入的参数的值的不同返回不同是实例
1、特点
被创建的实例具有共同的父类或接口
![image.png](https://cdn.nlark.com/yuque/0/2022/png/26501265/1667211391910-6dd4c668-1d6a-4deb-b0eb-438c1ffe0b30.png#averageHue=%23f7f6ed&clientId=ua137fa74-b5de-4&from=paste&height=218&id=uc0af85e6&originHeight=436&originWidth=1364&originalType=binary&ratio=1&rotation=0&showTitle=false&size=242975&status=done&style=none&taskId=u26dae9ca-f279-48ac-96de-b3a37468d90&title=&width=682)
2、适用场景
- 需要创建的对象较少
- 客户端(应用层)只知道传入工厂的参数,对如何创建对象(逻辑)不关心
3、优缺点
优点:
可以对创建的对象进行“加工”,对客户端隐藏相关细节
缺点:
4、代码参考
https://github.com/Meidanlong/all-in-one/tree/master/design/src/main/java/com/mdl/design/pattern/creational/simplefactory
UML类图
![image.png](https://cdn.nlark.com/yuque/0/2023/png/26501265/1689817310230-e69686e8-b2fc-4a5f-9ff3-e18063b6eeff.png#averageHue=%23f5f5f5&clientId=ud22bf210-0971-4&from=paste&height=708&id=u36606a2d&originHeight=1416&originWidth=1100&originalType=binary&ratio=2&rotation=0&showTitle=false&size=148027&status=done&style=none&taskId=ua2629b90-ed22-4abe-8229-62c93e52e21&title=&width=550)
二、工厂方法模式
1、特点
定义一个用于创建对象的接口,让子类决定实例化哪一个类
![image.png](https://cdn.nlark.com/yuque/0/2022/png/26501265/1667212006187-4bf0ab7f-d500-4099-a97a-d3e60e76c699.png#averageHue=%23edebd4&clientId=ua137fa74-b5de-4&from=paste&height=260&id=ub10d4739&originHeight=520&originWidth=1398&originalType=binary&ratio=1&rotation=0&showTitle=false&size=383411&status=done&style=none&taskId=u880c246d-863d-4a25-9b12-c39790d4ffe&title=&width=699)
2、使用场景
- 创建对象需要大量重复的代码
- 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节
- 一个类通过其子类来指定创建哪个对象
3、优缺点
优点:
缺点:
- 添加子类的时候“拖家带口”(类的个数容易过多,增加系统复杂度)
- 只支持用一类产品的创建
4、代码参考
https://github.com/Meidanlong/all-in-one/tree/master/design/src/main/java/com/mdl/design/pattern/creational/factorymethod
UML类图
![image.png](https://cdn.nlark.com/yuque/0/2023/png/26501265/1689817579085-cc674bea-85d4-45e3-bf22-e480b41745cb.png#averageHue=%23f7f7f7&clientId=ud22bf210-0971-4&from=paste&height=838&id=u96b0b410&originHeight=1676&originWidth=2124&originalType=binary&ratio=2&rotation=0&showTitle=false&size=231895&status=done&style=none&taskId=ua872ab66-f329-473a-833f-40b4a320c29&title=&width=1062)
标签:创建,
Factory,
工厂,
实例,
design,
创建对象,
com,
Method,
客户端
From: https://www.cnblogs.com/meidanlong/p/17918174.html