设计模式——AbstractFactory

上一篇我们提到,可以用工厂模式(Factory Pattern)实现一个类族的对象创建问题,但是对于不同的类,对象创建就需要抽象工厂模式(AbstractFactory Pattern)了。


抽象工厂模式的定义为:提供一个创建一系列相关或相互依赖的对象的接口,而无需指定它们具体的类

抽象工厂模式的实现为:将这一组对象的创建封装到一个用于创建对象的类,仅需要维护一个这样的创建类。

还是用一个具体的例子来解释。

我们将创建两个类,Shape和Color,定义Shape的draw()方法为虚函数,然后通过子类Circle和Square来实现,同理,定义Color的fill()方法为虚函数,然后通过子类Red和Green来实现。

class Shape
{
    public:
        Shape();
        virtual void draw(){};
};

class Circle : public Shape
{
    public:
        Circle();
        void draw();
};

class Square : public Shape
{
    public:
        Square();
        void draw();
};

void Circle::draw()
{
    cout<<"draw a circle"<<endl;
}

void Square::draw()
{
    cout<<"draw a square"<<endl;
}


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

class Red : public Color
{
    public:
        Red();
        void fill();
};

class Green : public Color
{
    public:
        Green();
        void fill();
};

void Red::fill()
{
    cout<<"fill with red"<<endl;
}

void Green::fill()
{
    cout<<"fill with green"<<endl;
}

然后我们定义一个抽象工厂类AbstractFactory,在里面去分别定义两个类的创建对象的方法。

enum shapetype
{
    CIRCLE,
    SQUARE
};

enum colortype
{
    RED,
    GREEN
};

class AbstractFactory
{
    public:
        virtual Shape *createShape(enum shapetype type);
        virtual Color *createColor(enum colortype type);
};

Shape *AbstractFactory::createShape(enum shapetype type)
{
    cout<<"createShape in AbstractFactory"<<endl;
    if(type == CIRCLE)
        return new Circle();
    if(type == SQUARE)
        return 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值