Java 抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families of related or dependent objects without specifying their concrete classes",翻译,“为创建一组相关或相互依赖的对象提供一个借口,无需指定它们的详细类”。抽象工厂模式一般是用于创一族产品,而且这族产品分不同的等级;不同的详细工厂类生产不同等级的一族产品。抽象工厂模式也有四种角色:抽象工厂、详细工厂、抽象产品和详细产品,详细解释參见“Java
工厂方法模式”一文。抽象工厂模式的类图例如以下:
能够看到产品族包含ProductA和ProductB两种产品,每一个详细工厂都能生产这两种产品,仅仅是ConcreteFactory1生产的等级为1的族产品;ConcreteFactory2生产的是等级为2的族产品。以下以上图为模型,写一个demo,測试抽象工厂模式。
抽象工厂:AbstractFactory接口
//抽象工厂,定义了生产族产品的方法;
public interface AbstractFactory {
public ProductA factoryA();
public ProductB factoryB();
}
抽象产品:ProductA接口
//抽象产品A定义了产品的公共方法,产品A和B属于一个产品族
public interface ProductA {
public void method1();
public void method2();
}
抽象产品:ProductB接口
//抽象产品B定义了产品的公共方法,产品A和B属于一个产品族
public interface ProductB {
public void method1();
public void method2();
}
详细工厂(生产等级为2的族产品):ConcreteFactory1类
//ConcreateFactory1是用来生产等级为1的产品A,B;
public class ConcreateFactory1 implements AbstractFactory { //生产等级为1的产品A
@Override
public ProductA factoryA() {
// TODO Auto-generated method stub
return new ConcreateProductA1();
} //生产等级为1的产品B
@Override
public ProductB factoryB() {
// TODO Auto-generated method stub
return new ConcreateProductB1();
} }
详细工厂(生产等级为1的族产品):ConcreteFactory2类
public class ConcreateFactory2 implements AbstractFactory { //生产等级为2的产品A
@Override
public ProductA factoryA() {
// TODO Auto-generated method stub
return new ConcreateProductA2();
} //生产等级为2的产品B
@Override
public ProductB factoryB() {
// TODO Auto-generated method stub
return new ConcreateProductB2();
}
}
详细产品(等级为1的A产品):ConcreteProductA1类
//等级为1的详细产品A
public class ConcreateProductA1 implements ProductA { @Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("等级为1的产品A的method1()");
} @Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("等级为1的产品A的method2()");
}
}
详细产品(等级为2的A产品):ConcreteProductA2类
//等级为2的详细产品A
public class ConcreateProductA2 implements ProductA { @Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("等级为2的产品A的method1()");
} @Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("等级为2的产品A的method2()");
}
}
详细产品(等级为1的B产品):ConcreteProductB1类
//等级为1的产品B
public class ConcreateProductB1 implements ProductB{ @Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("等级为1的产品B的method1()");
} @Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("等级为1的产品B的method2()");
}
}
详细产品(等级为2的B产品):ConcreteProductB2类
//等级为2的产品B
public class ConcreateProductB2 implements ProductB { @Override
public void method1() {
// TODO Auto-generated method stub
System.out.println("等级为2的产品B的method1()");
} @Override
public void method2() {
// TODO Auto-generated method stub
System.out.println("等级为2的产品B的method2()");
}
}
执行结果:
等级为1的产品A的method1()
等级为1的产品A的method2()
等级为1的产品B的method1()
等级为1的产品B的method2()
等级为2的产品A的method1()
等级为2的产品A的method2()
等级为2的产品B的method1()
等级为2的产品B的method2()
总结:
抽象工厂模式相对于工厂方法模式来说,每一个详细工厂能够生产一族产品(即多种产品);而工厂方法模式是详细工厂生产对应的详细产品,仅仅能生产一种产品。当产品族中仅仅有一种产品时抽象工厂模式退化成工厂方法模式。
Java 抽象工厂模式的更多相关文章
- Java抽象工厂模式
Java抽象工厂模式 基本定义 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象 ...
- 设计模式(四)——Java抽象工厂模式
抽象工厂模式 1 基本介绍 1) 抽象工厂模式:定义了一个 interface 用于创建相关或有依赖关系的对象簇,而无需指明具体的类 2) 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合. 3) ...
- java 抽象工厂模式简单实例
抽象工厂模式:提供一个创建一系列的相关的或者依赖的对象的接口,无需指定它们的具体实现类,具体的时间分别在子类工厂中产生. 类似于工厂模式:隔离了具体类的生产实现,使得替换具体的工厂实现类很容易.包含有 ...
- Java设计模式(三) 抽象工厂模式
原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...
- JAVA设计模式--抽象工厂模式
抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...
- java设计模式(三)--抽象工厂模式
转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...
- java设计模式之抽象工厂模式
上一篇文章(http://www.cnblogs.com/liaoweipeng/p/5768197.html)讲了简单工厂模式,但是简单工厂模式存在一定的问题,如果想要拓展程序,必须对工厂类进行修改 ...
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
- Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...
随机推荐
- 理解Windows内核模式与用户模式
1.基础 执行 Windows 的计算机中的处理器有两个不同模式:"用户模式"和"内核模式". 依据处理器上执行的代码的类型,处理器在两个模式之间切换.应 ...
- 蜘蛛侠天堂,打死我mac键盘
今天是周末,在我租住的房间,以一个离奇事件. 一个蜘蛛侠天堂,趴在我的假期车窗玻璃,爬下沿着玻璃.特别糟糕.可以飞檐走壁. 可惜体力不支,摔死在我的mac键盘上. 有图有视频. 视频链接:http:/ ...
- 事务不提交,也有可能写redo和数据文件
事务不提交,也有可能写redo和数据文件
- R语言数据框行转列实例
目的:须要把数据框的行列进行转置 方法: # 原始数据框 > hrl_jd_mon 年份 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月 1 2010年 51 ...
- Android万能适配器base-adapter-helper的源代码分析
项目地址:https://github.com/JoanZapata/base-adapter-helper 1. 功能介绍 1.1. base-adapter-helper base-adapter ...
- ffmpeg 频中分离 video audio 截取片断
1.获取视频的信息 ffmpeg -i video.avi 2,将图片序列分解合成视频 ffmpeg -i src.mpg image%d.jpg ffmpeg -f image2 -i ...
- 盒子游戏(The Seventh Hunan Collegiate Programming Contest)
盒子游戏 有两个相同的盒子,其中一个装了n个球,另一个装了一个球.Alice和Bob发明了一个游戏,规则如下:Alice和Bob轮流操作,Alice先操作.每次操作时,游戏者先看看哪个盒子里的球的数目 ...
- 部署、收回和删除解决方式----STSADM和PowerShell
部署.收回和删除解决方式----STSADM和PowerShell 由于近期总是要部署wsp解决方式,所以常常要用到命令行或者PowerShell.所以有必要将命令集中放在这里.在部署 ...
- Hlg 1832 【线段树 && RMQ】.cpp
题意: 在给出的区间内求出最大买进卖出的差价. 思路: 对于弱数据:维护一个从左到右的最大差价和最小值.即当发现当前值比最小值小的时候更新最小值,否则看一下当前值与之前最小值的差价是否比最大差价大,是 ...
- cocos2dx 制作单机麻将(一)
今天開始打算解说下cocos2dx下怎样制作国标麻将 前半部分先解说麻将的逻辑部分,由于都是代码,可能会比較枯燥无聊. 这部分讲完后,你也能够用其它游戏引擎来制作麻将 后半部分,就解说余下的cocos ...