抽象工厂模式

 简介:抽象工厂模式用于产品族的构建,抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。

区别:抽象工厂模式相对于工厂方法模式来说,就是工厂方法模式是针对一个产品系列的,而抽象工厂模式是针对多个产品系列的,即工厂方法模式是一个产品系列一个工厂类,而抽象工厂模式是多个产品系列一个工厂类。在抽象工厂模式中,客户端不再负责对象的创建,而是把这个责任丢给了具体的工厂类,客户端只负责对对象的调用,从而明确了各个类的职责。并且当一系列相互关联的产品被设计到一个工厂类里后,客户端的调用将会变地非常简单,而如果要更换这一系列产品,则就只需要更换一个工厂类即可。

 优点:

1.拥有工厂方法模式的优点

2.拓展一个产品等级容易,符合开闭原则

缺点:

1.拓展一个产品族是很困难的不符合开闭原则,要修改顶层工厂的接口类,不符合开闭原则

案例:

#include <iostream>
using namespace std;
class AbstractApple {
public:
    virtual void show()=0;
};
class ChinaApple :public AbstractApple{
public:
    virtual void show() {
        cout << "china apple" << endl;
    }
};
class UsaApple :public AbstractApple {
public:
    virtual void show() {
        cout << "usa apple" << endl;
    }
};
class AbstracBanana {
public:
    virtual void show() = 0;
};
class ChinaBanana :public AbstracBanana {
public:
    virtual void show() {
        cout << "china banana" << endl;
    }
};
class UsaBanana :public AbstracBanana {
public:
    virtual void show() {
        cout << "usa banana" << endl;
    }
};
class AbstractFactory {
public:
    virtual AbstractApple* create_apple() = 0;
    virtual AbstracBanana* create_banana() = 0;
};
class ChinaFactory :public AbstractFactory {
public:
    virtual AbstractApple* create_apple() {
        return new ChinaApple();
    }
    virtual AbstracBanana* create_banana() {
        return new ChinaBanana();
    }
};
class UsaFactory :public AbstractFactory {
public:
    virtual AbstractApple* create_apple() {
        return new UsaApple();
    }
    virtual AbstracBanana* create_banana() {
        return new UsaBanana();
    }
};
int main() 
{
    AbstractFactory* af;
    af = new ChinaFactory;
    AbstracBanana* ab;
    ab = af->create_banana();
    ab->show();
    AbstractApple* aa;
    aa = af->create_apple();
    aa->show();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值