Factory Method——工厂方法模式
什么是工厂方法模式
用模板方法模式来构建生成示例的工厂,就是工厂方法模式。在Factory Method模式中,父类决定实例的生成方式,但并不决定所要生成的具体的类,具体的处理全部交给子类负责。这样就可以将生成示例的框架和实际负责生成示例的类解耦。
工厂方法模式中的角色构成
工厂方法模式的类图
- Product(产品)
Product角色属于框架方,是一个抽象类或接口,定义了工厂方法创建的对象。 - ConcreteCreator(具体的产品)
ConcreteProduct角色属于具体加工这一方,它决定了具体的产品。 - Creator(创建者)
Creator属于框架方,是一个抽象类,负责生成Product角色,具体处理交由子类ConcreteCreator角色决定。
Creator会声明工厂方法,该方法会生成具体实例并将结果以Product类型的对象返回,可以用工厂方法创建一个Product对象。 - ConcreteCreator(具体的创建者)
ConcreteCreator角色属于具体加工这一方,它负责生成具体的产品。
示例程序
类组成表
包名 | 类名 | 说明 |
---|---|---|
factorymethod.framework | Product | 只定义了抽象方法use()的抽象类 |
factorymethod.framework | Factory | 实现了create方法的抽象类,还包含createProduct()和registerProduct()两个抽象方法 |
factorymethod.idcard | IDCard | Product的子类,实现了use()方法 |
factorymethod.idcard | IDCardFactory | Factory的子类,实现了createProduct()和registerProduct方法 |
factorymethod | FactoryMain | 测试类 |
示例程序类图:
Product类:
属于框架方,位于framework包中,声明了use()方法,定义了产品。
package com.example.factorymethod.framework;
public abstract class Product {
public abstract void use();
}
Factory类:
属于框架方,位于framework包中,使用了Template Method(模板方法模式)。Factory类声明了生成Product实例的create()方法,以及createProduct()和registerProduct()抽象方法,两个抽象方法的具体处理实现交给Factory类的子类负责。
Factory类定义了工厂是用来“调用create()方法生成Product示例”的。create()方法的实现是先调用createProduct()生成产品,接着调用registerProduct()注册产品。在使用Factory Method模式生成实例时,一定会用到Template Method模式。
package com.example.factorymethod.framework;
public abstract class Factory{
public final Product