java设计模式 -------- 创建模式 之 抽象工厂模式
本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020
工厂方法模式和抽象工厂模式不好区分清楚:
工厂方法模式特点:
1. 一个抽象产品类,能够派生出多个详细产品类。2. 一个抽象工厂类,能够派生出多个详细工厂类。3. 每一个详细工厂类仅仅能创建一个详细产品类的实例。抽象工厂模式特点:
1. 多个抽象产品类,每一个抽象产品类能够派生出多个详细产品类。2. 一个抽象工厂类。能够派生出多个详细工厂类。3. 每一个详细工厂类能够创建多个详细产品类的实例。也就是创建的是一个产品线下的多个产品。两者的差别:
1. 工厂方法模式仅仅有一个抽象产品类,而抽象工厂模式有多个。2. 工厂方法模式的详细工厂类仅仅能创建一个详细产品类的实例。而抽象工厂模式能够创建多个。3. 工厂方法创建 "一种" 产品,他的着重点在于"怎么创建"。也就是说假设你开发。你的大量代码非常可能环绕着这样的产品的构造,初始化这些细节上面。也由于如此。相似的产品之间有非常多能够复用的特征。所以会和模版方法相随。抽象工厂须要创建一些列产品,着重点在于"创建哪些"产品上,也就是说。假设你开发,你的主要任务是划分不同差异的产品线,而且尽量保持每条产品线接口一致,从而能够从同一个抽象工厂继承。
还是以上面的样例,即四则运算来说明,如果这样一种情况,如今不光是要实现两个double型的数的加减法,还要实现两个整数之间的加减法,也就是要在原来的基础上添加两个整型数的相加减。
每个模式都是针对一定问题的解决方式。
抽象工厂模式与工厂方法模式的最大差别就在于,工厂方法模式针对的是一个产品等级结构。而抽象工厂模式则须要面对多个产品等级结构。
在学习抽象工厂详细实例之前,应该明确两个重要的概念:产品族和产品等级。
所谓产品族,是指位于不同产品等级结构中,功能相关联的产品组成的家族。
如。能够将加法中的两个整型数相加,两个double型数进行相加,就构成一个产品族。
理解了这些后。那么怎样用抽象工厂方法来实现两个整数的相加减和两个double型的数相加减呢。先看UML类图:
有了UML类图,非常自然的,就能够写出各个类和接口,详细例如以下:
抽象工厂模式应用步骤:
1. 分别创建int型和double型的操作接口
public interface IntOperation {
public int Operate(int a,int b);
}
public interface DoubleOperation {
public double Operate(double a,double b);
}
2. 分别创建两种类型的加减法的实现类
public class IntAddOperation implements IntOperation { @Override
public int Operate(int a, int b) {
// TODO Auto-generated method stub
return a+b;
}
}
public class IntSubOperation implements IntOperation {
@Override
public int Operate(int a, int b) {
// TODO Auto-generated method stub
return a-b;
}
}
public class DoubleAddOperation implements DoubleOperation { @Override
public double Operate(double a, double b) {
// TODO Auto-generated method stub
return a+b;
}
}
public class DoubleSubOperator implements DoubleOperation { @Override
public double Operate(double a, double b) {
// TODO Auto-generated method stub
return a-b;
}
}
3. 创建抽象工厂接口
public interface OperationFactory {
public IntOperation createIntOperation();
public DoubleOperation createDoubleOperation();
}
4. 创建加法和减法的工厂实现类
public class AddOperationFactory implements OperationFactory { @Override
public IntOperation createIntOperation() {
// TODO Auto-generated method stub
return new IntAddOperation();
} @Override
public DoubleOperation createDoubleOperation() {
// TODO Auto-generated method stub
return new DoubleAddOperation();
}
}
public class SubOperationFactory implements OperationFactory { @Override
public IntOperation createIntOperation() {
// TODO Auto-generated method stub
return new IntSubOperation();
} @Override
public DoubleOperation createDoubleOperation() {
// TODO Auto-generated method stub
return new DoubleSubOperator();
}
}
5. 创建測试类
public class OperationTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//加法工厂负责生产两个整型数的相加和两个double型的数相加
OperationFactory of1 = new SubOperationFactory();
IntOperation IntAdd = of1.createIntOperation();
DoubleOperation DoubleAdd = of1.createDoubleOperation();
System.out.println("10+25="+IntAdd.Operate(10, 25));
System.out.println("10.2+25.3="+DoubleAdd.Operate(10.2, 25.3)); //减法工厂负责生产两个整数的相减,以及两个double型数的相减
OperationFactory of2 = new AddOperationFactory();
IntOperation IntSub = of2.createIntOperation();
DoubleOperation DoubleSub = of2.createDoubleOperation();
System.out.println("10-25="+IntSub.Operate(10, 25));
System.out.println("10.2-25.3="+DoubleSub.Operate(10.2, 25.3));
}
}
运行结果:
10+25=-15
10.2+25.3=-15.100000000000001
10-25=35
10.2-25.3=35.5
这个样例总感觉不太恰当,眼下我也在学习阶段。不是非常懂。随着学习设计模式的深入,等理解了再次来思考下这个抽象工厂模式,看到该帖的各位,假设有更好的解释。也请给我大概说下,共同学习嘛
java设计模式 -------- 创建模式 之 抽象工厂模式的更多相关文章
- Java设计模式(三) 抽象工厂模式
原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...
- Java设计模式学习笔记(四) 抽象工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...
- Java设计模式:Abstract Factory(抽象工厂)模式
概念定义 抽象工厂(Abstract Factory)模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式中,系统的产品有多于一个的产品族(一个产品族里定义多个产品) ...
- Java设计模式(二)抽象工厂模式
一.场景描述 接<Java设计模式(一)工厂模式>https://www.cnblogs.com/mahongbiao/p/8618970.html 工厂模式有一缺点,就是破坏了类的封闭性 ...
- Java设计模式(一) 简单工厂模式不简单
摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...
- Java设计模式(3)——创建型模式之抽象工厂模式(Abstract Factory)
一.概述 抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象. UML图: 其他的过多概念不再 ...
- Java设计模式之【工厂模式】(简单工厂模式,工厂方法模式,抽象工厂模式)
Java设计模式之[工厂模式](简单工厂模式,工厂方法模式,抽象工厂模式) 工厂模式出现的原因 在java中,创建一个对象最简单的方法就是使用new关键字.但在一些复杂的业务逻辑中,创建一个对象不只需 ...
- Java开发中的23中设计模式详解(一)工厂方法模式和抽象工厂模式
一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接 ...
- python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)
十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...
随机推荐
- [CF413D]2048
题目大意: 在一个长度为$n(n\le2000)$的数组中填数$2$或$4$,待所有数字全部填好后,按照类似于2048的规则向左合并.给定某些格子上的数,问在当前情况下要使得合并后的最大数超过$2^k ...
- redis踩坑记
本来打算给一批主库做从库,用来读取数据,还不想碰主库数据. 主库redis2.8.12,从库一开始没注意,docker了一个3.1的,结果slaveof之后命令不兼容,下了一个2.8的(2.8.23好 ...
- Java高级架构师(一)第05节:TortoiseGit的本地使用
- HTTP协议下保证登录密码不被获取最健壮方式
原文:http://www.cnblogs.com/intsmaze/p/6009648.html HTTP协议下保证登录密码不被获取最健壮方式 说到在http协议下用户登录如何保证密码安全这个问 ...
- 利用LogParser分析IIS日志
LogParser是微软官方出品的用于读取分析IIS日志的工具,使用类SQL语句过滤文本日志内容,并可将内容导出到csv.sqlserver作进一步分析 下载地址:http://www.micr ...
- git如何打补丁?
git cherry-pick 可以把某个分支的某几次提交合入到当前分支,只是在一台设备上操作. git format-patch 可以把某个分支的n次提交分别打成n个补丁,然后把这些补丁文件(比如0 ...
- 13:在O(1)时间删除单链表节点
题目:给定单项链表的头指针和一个节点指针.定义一个函数在O(1)时间删除该节点. 解析: 删除单向链表中的一个节点,常规做法是必须找到待删除节点的前一个节点才干实现.而这样做的时间复杂度是O(n).无 ...
- [转载]DIY树莓派之随身工具箱
摆弄树莓派有一年多了,在这里把经验分享给大家,少走弯路. 先放图两张. 搭建目的: wifi信号中转站\网站服务器\IC卡渗透测试\中间人\otr… 基于树莓派3 系统为Kali Linux 2017 ...
- java源码阅读ArrayBlockingQueue
1类签名与简介 public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQ ...
- shell报错:未预期的符号***附近有语法错误
1.安装dos2unix(我的centos命令: yum install dos2unix)2.执行命令:dos2unix 文件名.sh 3.执行命令:bash -n 文件名.sh (检查语法错 ...