设计模式之抽象工程模式Abstract Factory Pattern()C++实现
来源:互联网 发布:百分摔角软件 编辑:程序博客网 时间:2024/06/05 16:08
抽象工厂模式(Abstract Factory Pattern):是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
主要解决:主要解决接口选择的问题。
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
代码:
//-------------------------------------------------------// 设计模式:抽象工程模式//-------------------------------------------------------#include "stdafx.h"#include<iostream>#include <cstring>using namespace std;//------------------------------------------------------------------------------------------class Shape{public:void virtual draw()=0;};class Rec : public Shape{public:void draw(){cout << "Rec.draw()"<< endl;}};class Square : public Shape{public:void draw(){cout << "Square.draw()"<< endl;}};class Circle : public Shape{public:void draw(){cout << "Circle.draw()"<< endl;}};//------------------------------------------------------------------------------------------class Color{public:void virtual fill() = 0;};class Red :public Color{public:void fill(){cout << "Color.Red()" << endl;}};class Green :public Color{public:void fill(){cout << "Color.Green()" << endl;}};class Blue :public Color{public:void fill(){cout << "Color.Blue()" << endl;}};//-----------------------------------------------------------------------------class AbstractFactory{public:virtual Color* getColor(string color)=0;virtual Shape* getShape(string shape)=0;};class ShapeFactory : public AbstractFactory{public:Shape* getShape(string shape){if (shape.empty()){return NULL;}if (shape.compare("Rec") == 0){return new Rec();}if (shape.compare("Square") == 0){return new Square();}if (shape.compare("Circle") == 0){return new Circle();}return NULL;}Color* getColor(string color){return NULL;}};class ColorFactory : public AbstractFactory{public:Color* getColor(string color){if (color.empty()){return NULL;}if (color.compare("Red") == 0){return new Red();}if (color.compare("Green") == 0){return new Green();}if (color.compare("Blue") == 0){return new Blue();}return NULL;}Shape* getShape(string shape){return NULL;}};class FactoryProducer{public:AbstractFactory* getFactory(string choice){if (choice.compare("SHAPE") == 0){return new ShapeFactory();}else if (choice.compare("Color") == 0){return new ColorFactory();}return NULL;}};int _tmain(int argc, _TCHAR* argv[]){FactoryProducer factoryProducer;AbstractFactory* shapeFactory = factoryProducer.getFactory("SHAPE");Shape *shape1 = shapeFactory->getShape("Circle");shape1->draw();Shape *shape2 = shapeFactory->getShape("Square");shape2->draw();Shape *shape3 = shapeFactory->getShape("Rec");shape3->draw();//---------------------------------------------------------------------------AbstractFactory *colorFactory = factoryProducer.getFactory("Color");Color* color1 = colorFactory->getColor("Red");color1->fill();Color* color2 = colorFactory->getColor("Blue");color2->fill();Color* color3 = colorFactory->getColor("Green");color3->fill();system("PAUSE");return 0;}
0 0
- 设计模式之抽象工程模式Abstract Factory Pattern()C++实现
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
- Net设计模式之抽象工厂模式(Abstract Factory Pattern)
- JAVA设计模式之 抽象工厂模式【Abstract Factory Pattern】
- JAVA设计模式之 抽象工厂模式【Abstract Factory Pattern】
- 设计模式【抽象工厂Abstract Factory Pattern】
- 设计模式之-抽象工厂(Abstract Factory Pattern)
- 设计模式笔记6:抽象工程模式(Abstract Factory Pattern)
- 设计模式实现(二): Abstract Factory Pattern
- 设计模式 - Abstract Factory Pattern(抽象工厂模式)
- 设计模式 - Abstract Factory Pattern(抽象工厂模式)
- 设计模式 - Abstract Factory Pattern(抽象工厂模式)
- 设计模式3:Abstract Factory Pattern(抽象工厂模式)
- 设计模式——抽象工厂模式【Abstract Factory Pattern】
- c++设计模式:抽象工厂模式(Abstract Factory Pattern)
- 设计模式 - 抽象工厂模式(abstract factory pattern) 详解
- 浅谈设计模式:抽象工厂模式(Abstract Factory Pattern)
- 设计模式:抽象工厂模式(Abstract Factory Pattern)
- 模板讲解
- 锋利的JQuery 第三章内容
- iOS-------------主題管家
- ACM——1236
- 【C++】虚函数
- 设计模式之抽象工程模式Abstract Factory Pattern()C++实现
- LS(链路状态)算法及matlab仿真
- Android对话框Dialog详解
- Ubuntu安装配置mysql
- eclipse远程调试
- hibernate某些配置不要用
- POJ 2503 Babelfish(字典树)
- 安卓visibility的学习
- 中缀变后缀