- 一、角色
- 抽象工厂(Abstract Factory)角色:所有具体工厂类的接口
- 具体工厂(Concrete Factory)角色 :实现抽象工厂接口的具体工厂类
- 抽象产品(AbstractProduct)角色 :所有被创建实例的公共接口
- 具体产品(Concrete Product)角色 :创建的具体实例对象,具体产品由具体的工厂创建
- 二、适用场景
- 一个类不知道它所需要的对象的类:在工厂方法模式中,客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可,具体的产品对象由具体工厂类创建;客户端需要知道创建具体产品的工厂类
- 一个类通过其子类来指定创建哪个对象:在工厂方法模式中,对于抽象工厂类只需要提供一个创建产品的接口,而由其子类来确定具体要创建的对象,利用面向对象的多态性和里氏
- 将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无需关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中
- 三、实例
- 图-1中的Factory是抽象工厂角色,CircleFactory、RectangleFactory、SquareFactory是具体工厂角色,它们都实现了Factory接口,并对应的依赖相应的具体产品类Circle、Rectangle、Square,这些具体产品类都实现了抽象产品接口Shape,在客户端进行调用的时候只需要知道具体产品类的具体工厂就可以进行类的创建,还可以写在配置文件中进行工厂类的动态指定
- 代码地址:https://github.com/lanhei/DesignPattern/tree/master/src/com/lanhei/patterns/factoryabstract
图-1