抽象工厂模式(C++)

#define win 0
#define mac 1
#include <iostream>
using namespace std;

class button
{
public:
    button(){}
    virtual ~button(){}
    virtual void showbutton()=0;
};

class winbutton : public button
{
public:
    winbutton(){}
    virtual ~winbutton(){}
    void showbutton(){cout<<"win button"<<endl;}
};

class macbutton : public button
{
public:
    macbutton(){}
    virtual ~macbutton(){}
    void showbutton(){cout<<"mac button"<<endl;}
};

class text
{
public:
    text(){}
    virtual ~text(){}
    virtual void showtext()=0;
};

class wintext : public text
{
public:
    wintext(){}
    virtual ~wintext(){}
    void showtext(){cout<<"win text"<<endl;}
};

class mactext : public text
{
public:
    mactext(){}
    virtual ~mactext(){}
    void showtext(){cout<<"mac text"<<endl;}
};

class abstractfactory
{
public:
    abstractfactory(){}
    virtual ~abstractfactory(){}
    virtual button *createbutton()=0;
    virtual text *createtext()=0;
};

class winfactory : public abstractfactory
{
public:
    winfactory(){}
    virtual ~winfactory(){}
    button *createbutton(){return new winbutton;}
    text *createtext(){return new wintext;}
};

class macfactory : public abstractfactory
{
public:
    macfactory(){}
    virtual ~macfactory(){}
    button *createbutton(){return new macbutton;}
    text *createtext(){return new mactext;}
};

int main()
{
    abstractfactory *fc=new winfactory;
    button *bt=fc->createbutton();
    text *tx=fc->createtext();
    bt->showbutton();
    tx->showtext();
    delete bt;
    delete tx;
    delete fc;

    fc=new macfactory;
    bt=fc->createbutton();
    tx=fc->createtext();
    bt->showbutton();
    tx->showtext();
    delete bt;
    delete tx;
    delete fc;

    system("pause");
    return 0;
}

转载于:https://www.cnblogs.com/tiandsp/archive/2012/06/24/2560139.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抽象工厂模式是一种创建型设计模式,它提供了一种封装一组相关或相互依赖对象的方式,而不需要指定具体类。下面是一个简单的C++示例代码来说明抽象工厂模式的使用: ```cpp #include <iostream> // 抽象产品A class AbstractProductA { public: virtual void operationA() = 0; }; // 具体产品A1 class ConcreteProductA1 : public AbstractProductA { public: void operationA() override { std::cout << "ConcreteProductA1 operationA" << std::endl; } }; // 具体产品A2 class ConcreteProductA2 : public AbstractProductA { public: void operationA() override { std::cout << "ConcreteProductA2 operationA" << std::endl; } }; // 抽象产品B class AbstractProductB { public: virtual void operationB() = 0; }; // 具体产品B1 class ConcreteProductB1 : public AbstractProductB { public: void operationB() override { std::cout << "ConcreteProductB1 operationB" << std::endl; } }; // 具体产品B2 class ConcreteProductB2 : public AbstractProductB { public: void operationB() override { std::cout << "ConcreteProductB2 operationB" << std::endl; } }; // 抽象工厂 class AbstractFactory { public: virtual AbstractProductA* createProductA() = 0; virtual AbstractProductB* createProductB() = 0; }; // 具体工厂1 class ConcreteFactory1 : public AbstractFactory { public: AbstractProductA* createProductA() override { return new ConcreteProductA1(); } AbstractProductB* createProductB() override { return new ConcreteProductB1(); } }; // 具体工厂2 class ConcreteFactory2 : public AbstractFactory { public: AbstractProductA* createProductA() override { return new ConcreteProductA2(); } AbstractProductB* createProductB() override { return new ConcreteProductB2(); } }; int main() { // 使用具体工厂1创建产品 AbstractFactory* factory1 = new ConcreteFactory1(); AbstractProductA* productA1 = factory1->createProductA(); AbstractProductB* productB1 = factory1->createProductB(); productA1->operationA(); productB1->operationB(); // 使用具体工厂2创建产品 AbstractFactory* factory2 = new ConcreteFactory2(); AbstractProductA* productA2 = factory2->createProductA(); AbstractProductB* productB2 = factory2->createProductB(); productA2->operationA(); productB2->operationB(); delete factory1; delete factory2; delete productA1; delete productB1; delete productA2; delete productB2; return 0; } ``` 在上面的示例代码中,我们定义了抽象产品A和抽象产品B,然后分别实现了具体产品A1、具体产品A2、具体产品B1和具体产品B2。接下来,我们定义了抽象工厂和具体工厂1、具体工厂2,每个具体工厂都实现了创建抽象产品A和抽象产品B的方法。最后,在主函数中,我们使用具体工厂1和具体工厂2分别创建了产品,并调用了它们的操作方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值