设计模式--抽象工厂模式

介绍

http://www.runoob.com/design-pattern/abstract-factory-pattern.html
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
创建型模式。

实现

#include <iostream>
#include <string>
using namespace std;


class Shape
{
public:
virtual void Show()=0;
};


class Rectangle :public Shape
{
public:
void Show(){ cout<<"Rectangle"<<endl; }
};


class Circle : public Shape
{
public:
void Show(){ cout<<"Circle"<<endl; }
};


class Color
{
public:
virtual void fill()=0;
};


class Red:public Color
{
public:
void fill(){ cout<<"Red fill method"<<endl;}
};


class Black:public Color
{
public:
void fill(){ cout<<"Black fill method"<<endl;}
};


class AbstractFactory
{
public:
virtual Color* getColor(char* colorType) = 0;
virtual Shape* getShape(char* shapeType) = 0;
};


class ShapeFactory:public AbstractFactory
{
public:
Color* getColor(char* colorType){ return NULL;}
Shape* getShape(char* shapeType)
{


if (!strcmp(shapeType,"RECTANGLE"))
{
return new Rectangle();;
}
else if (!strcmp(shapeType,"CIRCLE"))
{
return new Circle();
}
return NULL;
}
};


class ColorFactory:public AbstractFactory
{
public:
Shape* getShape(char* shapeType){ return NULL;};
Color* getColor(char* colorType)
{


if (!strcmp(colorType,"RED"))
{
return new Red();;
}
else if (!strcmp(colorType,"BLACK"))
{
return new Black();
}
return NULL;
}
};
/*创建一个工厂创造器/生成器类,通过传递形状或颜色信息来获取工厂。*/
class FactoryProducer
{
public:
AbstractFactory* getFactory(char* factoryType)
{
          if (!strcmp(factoryType,"SHAPE"))
          {
 return new ShapeFactory;
          }
 else if (!strcmp(factoryType,"COLOR"))
 {
 return new ColorFactory;
 }
 return NULL;
}


};

#include "shape.h"
int main()
{
FactoryProducer* all = new FactoryProducer;
AbstractFactory* shapefactory = all->getFactory("SHAPE");
Shape* shape1 = shapefactory->getShape("RECTANGLE");
shape1->Show();


AbstractFactory* colorfactory = all->getFactory("COLOR");
Color* color1 = colorfactory->getColor("RED");
color1->fill();
getchar();
//delete 
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值