java设计模式 -------- 创建模式 之 抽象工厂模式
Posted yangykaifa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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设计模式 -------- 创建模式 之 抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章