• Appreciation to our TA, +7, who designed this task.

Client.cpp

#include <iostream>
#include <string>
#include "Factory.hpp"
#include "Product.hpp"
int main() {
UIFactory* ui = 0;
int choose;
std::cin >> choose;
switch (choose) {
case 0:
ui = new MFCUIFactory();
break;
case 1:
ui = new GtkUIFactory();
break;
case 2:
default:
ui = new QtUIFactory();
}
/* Use the factory to build interface. */
Window* toolbox = ui->getToolboxWindow();
Window* layers = ui->getLayersWindow();
Window* main = ui->getMainWindow();
/* See what have we recieved. */
std::cout << toolbox->getToolkit() << ":" << toolbox->getType() << std::endl;
std::cout << layers->getToolkit() << ":" << layers->getType() << std::endl;
std::cout << main->getToolkit() << ":" << main->getType() << std::endl;
ui->deleteWindow(toolbox);
ui->deleteWindow(layers);
ui->deleteWindow(main);
delete ui;
}

Product.hpp

#ifndef PRODUCT_HPP
#define PRODUCT_HPP
#include <iostream>
#include <string>
using namespace std;
class Window {
public:
virtual string getToolkit() = 0;
virtual string getType() = 0;
string kit;
};
class ToolboxWindow:public Window {
public:
ToolboxWindow(string a) {
kit = a;
}
virtual string getToolkit() {
return kit;
}
virtual string getType() {
return "ToolboxWindow";
}
};
class LayersWindow:public Window {
public:
LayersWindow(string a) {
kit = a;
}
virtual string getToolkit() {
return kit;
}
virtual string getType() {
return "LayersWindow";
}
};
class MainWindow:public Window {
public:
MainWindow(string a) {
kit = a;
}
virtual string getToolkit() {
return kit;
}
virtual string getType() {
return "MainWindow";
}
};
#endif

Factory.hpp

#ifndef FACTORY_HPP
#define FACTORY_HPP
#include <iostream>
#include <string>
#include "Product.hpp"
using namespace std;
class UIFactory {
public:
virtual Window* getToolboxWindow() = 0;
virtual Window* getLayersWindow() = 0;
virtual Window* getMainWindow() = 0;
virtual void deleteWindow(Window* a) = 0;
};
class MFCUIFactory:public UIFactory {
public:
MFCUIFactory() {}
virtual Window* getToolboxWindow() {
return new ToolboxWindow("MFC");
}
virtual Window* getLayersWindow() {
return new LayersWindow("MFC");
}
virtual Window* getMainWindow() {
return new MainWindow("MFC");
}
virtual void deleteWindow(Window* a) {
delete a;
}
};
class GtkUIFactory:public UIFactory {
public :
GtkUIFactory() {}
virtual Window* getToolboxWindow() {
return new ToolboxWindow("Gtk");
}
virtual Window* getLayersWindow() {
return new LayersWindow("Gtk");
}
virtual Window* getMainWindow() {
return new MainWindow("Gtk");
}
virtual void deleteWindow(Window* a) {
delete a;
}
};
class QtUIFactory:public UIFactory {
public:
QtUIFactory() {}
virtual Window* getToolboxWindow() {
return new ToolboxWindow("Qt");
}
virtual Window* getLayersWindow() {
return new LayersWindow("Qt");
}
virtual Window* getMainWindow() {
return new MainWindow("Qt");
}
virtual void deleteWindow(Window* a) {
delete a;
}
};
#endif

LN : Eden Polymorphic And OOP Design Pattern Abstract Factory的更多相关文章

  1. Design Pattern ->Abstract Factory

    Layering & Contract Philosophy With additional indirection Abstract Factory //The example code i ...

  2. [design pattern](5) Factory Method

    前言 在前面一章博主介绍了简单工厂模式(Simple Factory),接着上面的章节,今天博主就来介绍下工厂方法模式(Factory Method). 思考题 首先,让我们来思考下面的问题: 在上一 ...

  3. [转]Design Pattern Interview Questions - Part 1

    Factory, Abstract factory, prototype pattern (B) What are design patterns? (A) Can you explain facto ...

  4. 简单工厂设计模式(Simple Factory Design Pattern)

    [引言]最近在Youtub上面看到一个讲解.net设计模式的视频,其中作者的一个理解让我印象很深刻:所谓的设计模式其实就是运用面向对象编程的思想来解决平时代码中的紧耦合,低扩展的问题.另外一点比较有见 ...

  5. Design Pattern ——Factory Method&Abstract Factory

    今天开始复习设计模式.设计模式相关的资料有很多,概念性的东西就画个图就可以了.把关注点放在例子上,设计模式还是要使用中才有感受. 从Factory Method&Abstract Factor ...

  6. [转]Design Pattern Interview Questions - Part 4

    Bridge Pattern, Composite Pattern, Decorator Pattern, Facade Pattern, COR Pattern, Proxy Pattern, te ...

  7. java设计模式大全 Design pattern samples in Java(最经典最全的资料)

    java设计模式大全 Design pattern samples in Java(最经典最全的资料) 2015年06月19日 13:10:58 阅读数:11100 Design pattern sa ...

  8. 设计模式(Design Pattern)系列之.NET专题

    最近,不是特别忙,重新翻了下设计模式,特地在此记录一下.会不定期更新本系列专题文章. 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用 ...

  9. Scalaz(10)- Monad:就是一种函数式编程模式-a design pattern

    Monad typeclass不是一种类型,而是一种程序设计模式(design pattern),是泛函编程中最重要的编程概念,因而很多行内人把FP又称为Monadic Programming.这其中 ...

随机推荐

  1. SSL卸载技术对于HTTPS应用的优化与思考

    迅猛发展的互联网为我们提供了丰富的信息资源,在带来便利的同时也影响着人们工作和生活方式.而让我们无法忽视的是,在开放的互联网所带来的繁荣背后,同时也潜藏着安全方面的隐患.随着人们对网络的依赖愈渐加深, ...

  2. 苹果app(iOS app)的URL schemes

    最近折腾iOS快捷启动应用或应用内的某个动作的神器launch center pro (LCP),发现很多国产app并没有被LCP官方收录,所以不得不想办法找到app的url schemes. 下面是 ...

  3. React-Native 基本环境的搭建

    看了一些RN资料,仅仅了解到人们对 RN(以下简称 React_native 框架) 的使用描述以及评价,就觉得RN是一个很不错的框架,值得学习.今天就开始写我的学习记录,也给大家分享一下.下面进入正 ...

  4. java中有关socket通信的学习笔记

    最近做的项目中使用到了一些基于java的socket长连接的一些功能,用来穿透有关行业的网闸.用到了也就学习了一下,下面是对学习内容的一个笔记,记录一下也希望有兴趣的同学可以参考一下,加深对javas ...

  5. C杂谈

    最近在做关于C的项目开发,记录一下有关C的操作,比较杂乱 1.利用System进行文件数量统计: 1) system("dir /b /s /ad d:\\mydir\\*.* | find ...

  6. python GUI尝鲜(但当涉猎,见往事耳)

    第一步:简单的窗口和内容 import tkinter as tk window = tk.Tk() # 窗口obj对象 window.title('my TK') # 窗口名字 window.geo ...

  7. Lua教程 loadfile与loadstring

    在程序运行中有时需要运行用户输入的代码1.loadfile把文件编译为可执行的函数f=loadfile('\\temp\\a.lua')     ----给f方法赋值print(type(f))  - ...

  8. SmartSql使用教程(3)——SmartSql中的事务,及AOP的使用

    一.引言 经过两章的铺垫,我们现在对SmartSql已经有了一定的了解,那么今天我们的主题是事务处理.事务处理是常用的一种特性,而SmartSql至少提供了两种使用事务的方法.一种是通过Reposit ...

  9. E20180527-hm

    percolate vi. 渗透; 滤; 渗入; (思想等) 渗透

  10. 我叫mt3.0更新公告

    1.增加卡牌: (1)炮姐,种族:牛头人,职业:元素萨满,可在任务中使用万能碎片兑换,最多兑换5张: (2)娘子,种族:德莱尼人,职业:治疗萨满,进化材料为死亡视察者: 详情点击查看>>& ...