- 一、角色
- 抽象工厂(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
相关文章
- 2.数值计算(1) --求解连续微分系统和混沌系统
- Newtonsoft.Json高级用法 1.忽略某些属性 2.默认值的处理 3.空值的处理 4.支持非公共成员 5.日期处理 6.自定义序列化的字段名称
- 《istio-in-action系列》 2. 初始化第一个项目
- Solidity极简入门#2. 数值类型
- 2.初步认识Angular2
- Win32编程API 基础篇 -- 2.一个简单的窗口 根据英文教程翻译
- 网络编程-SOCKET开发之----2. TCP粘包现象产生分析
- CSharp程序员学Android开发---2.个人总结的快捷键
- [Web Chart系列之五] 2. 实战draw2d 之Label 放大,缩小的问题(raphael的text类似问题)
- 【Tomcat】2.配置Tomcat服务器端口和HTTPS