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的相似,在此不再列出。

4、点击下载源码

抽象工厂模式的C++、Java实现的更多相关文章

  1. Java设计模式(三) 抽象工厂模式

    原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...

  2. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

  3. java设计模式(三)--抽象工厂模式

    转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...

  4. java设计模式之抽象工厂模式

    上一篇文章(http://www.cnblogs.com/liaoweipeng/p/5768197.html)讲了简单工厂模式,但是简单工厂模式存在一定的问题,如果想要拓展程序,必须对工厂类进行修改 ...

  5. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  6. Java 抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families ...

  7. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

  8. 抽象工厂模式(Java与Kotlin版)

    前文推送 设计模式 简单工厂模式(Java与Kotlin版) 工厂方法模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操 ...

  9. java之设计模式工厂三兄弟之抽象工厂模式

    [学习难度:★★★★☆,使用频率:★★★★★]  工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工 ...

  10. Java设计模式系列-抽象工厂模式

    原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755412.html 一.概述 抽象工厂模式是对工厂方法模式的再升级,但是二者面对的场景稍显差别. ...

随机推荐

  1. python全栈开发_day8_文件的多种读写方式及游标

    一:文件的多种读写方式 主方式:w    r    a 从方式:t     b    + 了解方式:x    u 1)按t(按照字符进行操作): with open("data_1.txt& ...

  2. 洛谷 P3224 [HNOI2012]永无乡

    题面 永无乡包含 \(n\) 座岛,编号从 \(1\) 到 \(n\) ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 \(n\) 座岛排名,名次用 \(1\) 到 \(n\) 来表示.某些岛 ...

  3. <div>标签输入文字

    @*输入框,contenteditable="true"使能div可以输入文字*@ <div contenteditable="true" class=& ...

  4. APP高级抓包

    1.fiddler的证书安装问题时密码问题 问题:我手机下载了fiddler证书 从设置里面安装证书 可是需要输入密码 我没有设置过密码 不知道密码是什么 请问有人遇到过这样的问题的?求解决方法 因为 ...

  5. Android中调用高德导航(组件)

    btn_.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //调用 ...

  6. ionic3 引入第三方库(jquery)

    安装 npm install jquery npm install @types/jquery 在需要的ts文件中引入,一定要在最顶端 import * as $ from '../../../nod ...

  7. C#反射动态调用dll中的方法,并返回结果(转)

    反射的作用是动态的加载某个dll(程序集),并执行该程序集中的某个方法,并返回结果:当然也可以给该方法传递参数 namespace assembly_name { public class assem ...

  8. webstorm-主题和配色

    webstorm-主题和配色 2016年01月31日 19:40:54 walkersc 阅读数:73670更多 个人分类: javascript   URL:http://blog.csdn.net ...

  9. 利用URL Scheme打开APP并传递数据

    https://blog.csdn.net/u013517637/article/details/55251421 利用外部链接打开APP并传递一些附带信息是现在很多APP都有的功能,我在这把这部分的 ...

  10. PyCharm+cmd中使用Anaconda 与 新建Python环境(Windows)

    PyCharm配置Anaconda Anaconda的安装在网上已经有了,这里主要讲之前已经安装了已经配置好Python环境变量以及PyCharm的情况下,使用Anaconda. 即在PyCharm中 ...