抽象工厂模式的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 一.概述 抽象工厂模式是对工厂方法模式的再升级,但是二者面对的场景稍显差别. ...
随机推荐
- centos6安装mysql5.7
RPM包安装与卸载mysql 建议:装完mysql后立刻创建一个密码,不然下次登录的时候会有问题.原因是mysql 5.7会自动创建一个临时密码,过期失效,可以到grep "password ...
- mysql数据的导入导出
2017-12-15 一. mysqldump工具基本用法,不适用于大数据备份 1. 备份所有数据库: mysqldump -u root -p --all-databases > ...
- <转>jmeter JDBC Request之Query Type
本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...
- c 调用 lua 向lua函数 传递table
参考 https://www.myvoipapp.com/blogs/yxh/2016/07/14/c%E5%90%91lua%E5%87%BD%E6%95%B0%E4%BC%A0%E9%80%92t ...
- windows 安装python问题总结
一.安装支持包 很多二进制包 NumPy-1.9+MKL 以及 Microsoft Visual C++ 2008 (x64, x86, and SP1 for CPython 2.6 and 2.7 ...
- 对cors的理解
一.简介 CORS需要浏览器和服务器同时支持.目前,所有浏览器都支持该功能,IE浏览器不能低于IE10. 整个CORS通信过程,都是浏览器自动完成,不需要用户参与.对于开发者来说,CORS通信与同源的 ...
- 2016级算法第二次上机-B.Bamboo的OS实验
Bamboo的OS实验 分析 首先理解题意,要完成不同数量的不同命令,但是完成相同的命令之间必须有n个间隔,为使得时间最短,自然优先用其他命令来填充这n分钟的时间,由于数量少的命令可以用来填充空隙,所 ...
- JDBC完成增加-修改-增加-查询
JDBC的基本使用流程: 增加 1 导入jar包: 导入ojdbc6.jar,在项目上右键 builder path-->add to builder path. 2 ...
- SQL的CharIndex用法
和C#一样判断一个字符串中是否包含另一个字符串举例1:select charindex('test','This Test is test!!')->返回 6 (空格也算一个 下标从1开始)2: ...
- pipenv 虚拟环境新玩法
首先,虚拟环境本质是一个文件,是为了适应不同的项目而存在.pipenv相当于virtualenv和pip的合体. pipenv主要有以下特性: (1)pipenv集成了pip,virtualenv两者 ...