抽象工厂模式的C++、Java实现
1、抽象工厂模式UML

图1. 抽象工厂模式的UML
2、C++实现
C++实现类图为:

图2. 抽象工厂模式的C++实现类图
其中,AbstractFactory的实现代码为:
//抽象工厂类基类。
class AbstractFactory
{
public:
AbstractFactory();
~AbstractFactory(); //创建具体的产品的抽象工厂方法。
//创建A类对象。
virtual ProductA * CreateProductA() = ; //创建B类产品对象。
virtual ProductB * CreateProductB() = ;
};
ConcreteFactoryA的实现代码为:
class ConcreteFactory1 :
public AbstractFactory
{
public:
ConcreteFactory1();
~ConcreteFactory1(); //创建ConcreteProductA1的抽象工厂方法。
ProductA * CreateProductA(); //创建ConcreteProductA1的抽象工厂方法。
ProductB * CreateProductB(); };//end class ConcreteFactoryA ProductA * ConcreteFactory1::CreateProductA()
{
ProductA * pa = new ConcreteProductA1();
return pa;
}//end method CreateProductA ProductB * ConcreteFactory1::CreateProductB()
{
ProductB * pb = new ConcreteProductB1();
return pb;
}//end method CreateProductB
其中,ConcreteFactory2的代码与ConcreteFactory1的相似,不再列出。
3、Java的实现
Java实现的类视图为:

图3. 抽象工厂模式的Java实现类视图
其中,AbstractFactory的代码为:
//抽象工厂类。
public interface AbstractFactory { //创建A类产品的抽象工厂方法。
public abstract ProductA CreateProductA(); //创建B类产品的抽象工厂方法。
public abstract ProductB CreateProductB(); }//end interface AbstractFactory
ConcreteFactory1的代码为:
public class ConcreteFactory1 implements AbstractFactory {
//创建ConcreteProductA1的对象。
@Override
public ProductA CreateProductA() {
// TODO Auto-generated method stub
return new ConcreteProductA1();
}//end method CreateProductA
//创建ConcreteProductB1的对象。
@Override
public ProductB CreateProductB() {
// TODO Auto-generated method stub
return new ConcreteProductB1();
}//end method CreateProductB
}//end class ConcreteFactory1
ConcreteFactory2的代码与ConcreteFactory1的相似,在此不再列出。
抽象工厂模式的C++、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 抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families ...
- Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式
工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...
- 抽象工厂模式(Java与Kotlin版)
前文推送 设计模式 简单工厂模式(Java与Kotlin版) 工厂方法模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操 ...
- java之设计模式工厂三兄弟之抽象工厂模式
[学习难度:★★★★☆,使用频率:★★★★★] 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工 ...
- Java设计模式系列-抽象工厂模式
原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755412.html 一.概述 抽象工厂模式是对工厂方法模式的再升级,但是二者面对的场景稍显差别. ...
随机推荐
- JMessage Android 端开发详解
目前越来越多的应用会需要集成即时通讯功能,这里就为大家详细讲一下如何通过集成 JMessage 来为你的 App 增加即时通讯功能. 首先,一个最基础的 IM 应用会需要有哪些功能? 用户注册 / 登 ...
- Ionic2文档整理
来自:Rainey's Blog 原文地址:http://rainey.space/2016/04/06/Ionic2_Chinese_Document/ Github:https://github. ...
- inception_web
1) wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py 2) python ez_setup.py --insecur ...
- Kettle 值映射
在费用转换里面做了两个值映射.一个是编码.一个是名称.其中两个值映射设置不一样效果不一样. 第一个编码映射 目标字段名不为空,则表示会新增字段.其中复核源值条件的都会转换为目标值,不符合条件的会用[不 ...
- [LnOI2019]加特林轮盘赌
Luogu5249 轮流开枪打一个环上的人 , 每次\(p\)的概率打死 , \(p\)始终相同 , 从第\(1\)个人开始 , 求第\(k\)个人成为唯一幸存者的概率 \(19.3.30\) 官方题 ...
- 2018牛客多校6 - I Team Rocket KD树维护空间
题意:给出n条铁路区间\([L,R]\),共有m个boom依时间顺序放置在\(k_i\)中,区间与\(k_i\)有交集的都被炸掉 求每次炸掉的铁路个数和最后输出所有id被炸的时间点 炸弹能炸到的区间满 ...
- MB Star C3 vs MB Star C4
New Mercedes Benz Star C3 is a professional diagnostic tool specially for mercedes benz cars. Merced ...
- SQL基础语法select|insert|update|delete(增删改查) 简单使用
以下案列以此表举例 1.select(查询) select简单的查询分为两种 注:字段也就是表结构中的列的名称 第一种: select 字段名 from 表名 此种查询只列出你所需要查询的字段, ...
- Robot Framework_Ride(Settings)
Settings 不管是测试套件还是测试用例都会有一个“Settings>>”的按钮,因为它默认是被折叠起来的,所以,一般不太容易发现它,更不知道点击它之后是可以展开的 1.测试用例的 S ...
- 014-CallbackServlet代码
package ${enclosing_package}; import java.io.IOException; import java.util.ResourceBundle; import ja ...