目录
工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式类图
- 抽象产品(Product):抽象类或者接口,负责规定产品的规范。
- 具体产品(ConcreteProduct):具体产品类,实现抽象产品的规范。
- 构造者(Creator):抽象类或者接口,定义一个抽象的生产方法,由子类负责具体实现。
- 具体构造者(ConcreteCreator):具体构造者,实现构造者方法,生成具体产品。(具体产品会被上转型为抽象类型的对象)
工厂方法的优点
- 使用工厂方法可以让用户的代码和某个特定类的子类的代码解耦。(构造者与具体产品不接触,用户代码不需要引入ConcreteProduct类)
- 工厂方法使用户不必知道它所使用的对象是怎样被创建的,只需要知道该对象有哪些方法即可。(用户只需要知道产品Product的使用方式,不需要知道产品的创建过程。司机会开车就行,不需要知道汽车是如何建造的)
工厂方法的使用情景
- 用户需要一个类的子类的实例,但不希望与该类的子类形成耦合。
- 用户需要一个类的子类的实例,但不知道该类有哪些子类可用。
JDK相关的工厂方法实现举例
- 抽象产品(Iterator):抽象类或者接口,负责规定产品的规范。
- 具体产品():由LinkedList、HashSet构造的,实现Iterator接口的内部类。
- 构造者(Collection):集合接口,定义了iterator方法,由具体类实现。
- 具体构造者(LinkedList、HashSet):具体集合,返回具体的Iterator实现。