设计模式三之工厂方法模式
1. 模式的定义与特点
1.1 模式的定义
定义一个创建产品对象的工厂接口,将产品的创建工作推迟到具体子工厂类当中,满足创建型模式中“创建与使用相分离“的特点。
我们把被创建出来的对象叫做产品,把创建的产品的对象称为工厂,如果要创建的产品不多,只需要一个工厂类就可以完成了,这种模式叫做“简单工厂模式“,它不属于 GOF 23 种经典设计模式,因为它新增产品时会违背“开闭原则“。工厂方法模式就是对简单工厂模式的进一步抽象化,其好处是在系统不修改原来的代码的情况下引进新的产品,即满足开闭原则。
1.2 模式的特点
工厂方法模式的主要优点有:
- 用户只需要关心所需产品对应的工厂,无需关心创建细节;
- 加入新产品符合开闭原则,提高可扩展性。
工厂方法模式的缺点有:
- 类的个数容易增多,增加复杂度;
- 增加了系统的抽象性和理解难度。
2. 模式的结构与实现
工厂方法模式是由抽象工厂,具体工厂,抽象产品和具体产品等四个要素组成。
2.1 模式的结构
工厂方法的主要角色如下:
- 抽象工厂(Abstract Factory):提供了创建产品的接口,客户端通过它访问具体工厂的工厂方法来创建产品;
- 具体工厂(Concrete Factory):主要是实现抽象工厂种的抽象方法,完成具体产品的创建;
- 抽象产品(Abstract Product):定义了产品的规范,描述了产品的特性和功能;
- 具体产品(Concrete Product):实现了抽象产品所定义的功能,由具体工厂来创建,它同具体工厂一一对应。
2.2 模式的实现
抽象产品类
/**
* 产品抽象类,也可以是 abstract class
*/
public interface Video {
void produce();
}
具体产品类
/**
* 具体产品
*/
public class JavaVideo implements Video {
@Override
public void produce() {
System