工厂方法模式:是一种创建型设计模式,它定义了一个用于创建对象的接口,但是让子类决定实例化哪个类。工厂方法模式将对象的创建延迟到子类中进行,从而实现了解耦。(可以有多个工厂类,一个工厂生产一种产品,适用于创建多种产品的情况)
工厂方法模式的优点是:
可以通过工厂方法来控制对象的创建,实现了解耦。
可以通过添加新的具体工厂类来扩展系统,符合开闭原则。
可以通过抽象工厂类来定义一组相关的产品对象,使得系统更加灵活。
工厂方法模式的缺点是:
需要定义抽象工厂类和具体工厂类,增加了系统的复杂度。
每个具体工厂类只能创建一种具体产品,无法创建复杂对象。
工厂方法模式包含四个角色:
抽象产品类:定义产品的接口,包含产品的属性和方法。
具体产品类:实现抽象产品类的接口,具体实现产品的属性和方法。
抽象工厂类:定义工厂的接口,包含创建产品的方法。
具体工厂类:实现抽象工厂类的接口,具体实现创建产品的方法。
首先,定义一个抽象产品类:
1 | public abstract class Product { |
然后,定义两个具体产品类:
1 | public class ProductA extends Product { |
接下来,定义一个抽象工厂类,用于创建产品对象:
1 | public abstract class Factory { |
然后,定义两个具体工厂类,分别用于创建具体产品A和具体产品B:
1 | public class FactoryA extends Factory { |
最后,客户端可以通过具体工厂类来创建产品对象:
1 | public class Client { |
简单工厂模式和工厂方法模式异同点:
相同点:
- 都是用来创建对象的设计模式。
- 都将对象的创建过程封装起来,使得客户端不需要知道具体的创建过程。
- 都可以通过增加新的产品类来扩展系统的功能。
不同点:
- 简单工厂模式只有一个工厂类,而工厂方法模式有多个工厂类,每个工厂类负责创建一种产品。
- 简单工厂模式的工厂类通常使用静态方法,而工厂方法模式的工厂类通常使用非静态方法。
- 简单工厂模式的客户端只需要知道产品的类型,而工厂方法模式的客户端需要知道具体的工厂类。
- 简单工厂模式的工厂类负责所有产品的创建,而工厂方法模式的工厂类只负责创建一种产品。
- 本文作者: zzr
- 本文链接: http://zzruei.github.io/2023/0398f870a2.html
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!