• 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. python 基础之第八天--字典相关

    zx #####################创建字典###################################### In [11]: dict([('name','bob'),('a ...

  2. codevs 3269 混合背包(复习混合背包)

    传送门 [题目大意]给出物品的数量.-1为无限个. [思路]混合背包.... [code] #include<iostream> #include<cstdio> #inclu ...

  3. c++ zlib(qt)压缩与解压缩

    #include <QtCore/QCoreApplication> #include "zlib.h" #include "stdio.h" #i ...

  4. spring boot 部署 发布

    Spring Boot应用的打包和部署 字数639 阅读2308 评论0 喜欢5 现在的IT开发,DevOps渐渐获得技术管理人员支持.云计算从ECS转向Docker容器技术.微服务的概念和讨论也越来 ...

  5. 查看Ubuntu的版本

    方法一: cat /etc/issue 方法二: lsb_release -a

  6. docker --help 详解

    [root@c1 _src]# dockerd --help Usage: dockerd [OPTIONS] A self-sufficient runtime for containers. Op ...

  7. 《Kubernetes权威指南第2版》学习(一) Kubernetes是什么

    1.1 Kubernetes是什么? 首先,它是一个全新的基于容器技术的分布式架构领先方案.是谷歌的Borg(大规模集群管理系统)的一个开源版本. 其次,如果系统设计遵循了Kubernetes的设计思 ...

  8. 网络应用软件结构-----CS与BS结构(网络基本知识小结)

    1.网络的大致结构 2.网络编程 通过直接或间接地使用网络通讯的协议实现计算机与计算机之间的通讯.在TCP/IP协议层主要麦网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的 ...

  9. VMware桥接模式选择宿主机物理网卡

    当宿主机有多块物理网卡时,VMware桥接模式也要根据情况选择使用的物理网卡. 比如宿主机有两块物理网卡,一个连外网,一个连内网,如果想与内网组成局域网就需要选择宿主机的内网网卡,反之选择外网网卡,当 ...

  10. DataWindow.NET 控件 实现点击列头排序

    1.定义字段                         Boolean ib_SetSort = true;                string is_SortType = " ...