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页 ...
随机推荐
- 微软应用商店错误 0x00000194
也可以下载安装包手动更新尝试解决. ------------------------------------------------------------------- 今天OTA升级了1809,应 ...
- WordPress插件扫描工具plecost
WordPress插件扫描工具plecost WordPress是PHP语言开发的博客平台.该平台允许用户通过插件方式扩展博客功能.由于部分插件存在漏洞,给整个网站带来安全风险.Kali Linu ...
- [Contest20180318]求和
题意:求$\sum\limits_{i=1}^n\sum\limits_{j=1}^i\sum\limits_{k=1}^i(i,j,k)$ 先令$f(n)=\sum\limits_{i=1}^n\s ...
- git强行推送到远端
回到某一个节点git reset --hard 5db4eddeca2然后把现在这个节点,强行推送到远端git push -f origin master
- PHP将字符串首字母大小写转换
每个单词的首字母转换为大写:ucwords() <?php $foo = 'hello world!'; $foo = ucwords($foo); // Hello World! $bar = ...
- Asp.net Core学习文章
杜现鹏的Asp.net Core文章 EF Core 官方教程 https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new- ...
- java project打包生成jar包(通用)
1. 在工程目录下新建一个build.xml文件,如下图所示,注意必须是在工程目录下,而不是在工程目录的src目录里. 2.编写ant脚本,内容如下,jar文件名称(com.anllin.rup.bo ...
- Java笔记4:JDBC纯驱动方式连接Oracle
JDBC纯驱动方式连接Oracle 1 下载Oracle提供的驱动程序包 下载地址: http://www.oracle.com/technetwork/database/enterprise-edi ...
- Yahoo 股票数据抓取
Yahoo提供日线级别的历史数据,包括国内外各交易所的数据,可以写爬虫抓取数据做简单的分析. api基本格式如下: http://ichart.yahoo.com/table.csv?s=<st ...
- tomcat进阶操作
1.使用war包部署web站点 [root@tomcat webapps]# pwd /application/tomcat/webapps [root@tomcat webapps]# rz ...