设计模式之抽象工程模式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
原创粉丝点击