Abstract factory抽象工厂--对象创建型
意图:
提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。
别名:Kit
补充:
抽象产品A : (产品A1 和产品 A2)
抽象产品B : ( 产品B1 和 产品B2)
一般情况下:想要创建产品A1和A2
{
ProductA a1 = new ProductA1();
ProductA a2 = new ProductA2();
}
在工厂设计模式中,可以设计一个工厂,由它来提供产品A1和产品A2的创建过程,即
工厂模式
ProductAFactory{
public static ProductA createProductA1(){
return ProductA();
}
public static ProductA createProductA2(){
return ProductA2();
}
}
抽象工厂:
将相似的工厂进行抽象合并 ,是工厂模式的进一步抽象升华
在这个抽象工厂中 A1和B1====A2 和 B2 是有相似关系的
AbstarctFactory{
createProductA(){
// 子类/实现类,可以根据需要创建产品 A1 或产品 A2
}
createProductB(){
// // 子类/实现类,可以根据需要创建产品 B2 或产品 B2
}
}
动机:
抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。
使用抽象工厂模式,能够在具体工厂变化的时候,不用修改使用工厂的客户端代码,甚至是在运行时。然而,使用这种模式或者相似的设计模式,可能给编写代码带来不必要的复杂性和额外的工作。正确使用设计模式能够抵消这样的“额外工作
优点:
1.具体产品从客户代码中被分离出来
容易改变产品的系列
将一个系列的产品族统一到一起创建
缺点:
1.在产品族中扩展新的产品是很困难的,它需要修改抽象工厂的接口
最新文章
- Hadoop namenode无法启动
- 设置让ASP.NET管道接收所有类型的请求
- nssstring 转换大小写
- STM32F0xx_TIM基本延时配置详细过程
- Gentoo安装配置过程与总结
- C++在堆上申请和释放内存 - new &; delete
- colspan是跨列,rowspan是跨行
- php 求两个文件的相对路径
- (大数据工程师学习路径)第一步 Linux 基础入门----基本概念及操作
- ecshop加入购物车效果(各个页面)
- Debian安装fail2ban来防止扫描
- [Manacher]【学习笔记】
- JavaScript 之存取器属性
- java基础点总结
- 求f(n)=[n/1]+[n/2]+---+[n/n]的值 简单杂题
- JAVA课后作业01
- Mentor面向智能家居的IoT方案
- linux 文件解锁
- EnvironmentError: mysql_config not found问题解决(centos7下python安装mysql-python)
- STL-queue和循环队列基本操作的实现
热门文章
- 【转】Spark:Master High Availability(HA)高可用配置的2种实现
- 专题二:HTTP协议详解
- dubbo与springmvc的简单使用
- js实现左右点击图片层叠滚动特效
- WordPress极简主题Small Cat详细介绍
- JavaScript(八)日期对象
- HDU_1789_doing homework again_贪心
- Redis系列(三)--消息队列、排行榜等
- Java中XML数据
- 使用lombok注解@Getter @Setter方法代码编译成功,但是没有生成get,set方法