版权声明:就是开个版权玩一下 https://blog.csdn.net/qq_41997479/article/details/86619116
06 Factory Method(创建型)
-
- 当您使用new时,您肯定是在实例化一个具体的类,所以这肯定是一个实现,而不是接口。
- 在05策略上,我们学习了一个设计原则:
区分哪些变化与哪些保持不变。把变化的东西“封装”起来。
-
- 满足的原则:
- 变化封装原则
- 开放封闭原则
- 依赖倒置原则
- 满足的原则:
要依赖抽象,不要依赖具体类。用依赖倒置原则设计的系统,使得对象的实现从使用中解耦,具有很好的可扩展可维护可理解性
依赖抽象而不是具体,使用(客户)和实现(具体类)松耦合
-
- 动机:创建一个接口,这个接口用于创建对象,而不是让客户来创建
- 也叫 虚拟构造器
- 什么时候使用:
- 具体的产品细节不应该暴露给客户
- 创建者不能决定他必须创造的具体产品
- 创建者希望其子类指定其创建的产品。
- 创建者将创建实例的责任委托给几个子类之一。
-
- 优点:
- 通过将所有创建代码(new)放在一个对象或方法中,避免代码重复,并提供一个执行维护的位置,实现把new去掉
- 客户机只依赖于接口,而不是实例化对象所需的具体类。——编程到一个接口,而不是实现。
- 缺点:
- 客户可能不得不子类化
- 创建类只是为了创建一个特定的ConcreteProduct对象。
- 实现:
- creater可以是抽象或者具体的
- 参数化的工厂方法
- 工厂方法通过使用标识要创建的对象类型的参数来创建多种产品。
- 优点:
-
- 变形:
- 简单工厂模式
- 静态工厂模式
- 简单工厂模式
- 依赖注入:继续去掉new
- 构造器注入
- Setter injection
- Interface injection
- 构造器注入
- Bean Factory
- 像Spring这样的框架可以构造这些相同的对象,并在返回对客户机的引用之前将它们连接在一起。注意,所有提到ServiceExample的内容都已从代码中删除。
- 上面的代码构造对象并根据如下bean.xml配置文件将它们连接在一起
- 变形: