工厂方法模式(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 factory
{
public:
    factory(){}
    virtual ~factory(){}
    virtual button *createbutton()=0;
};

class winfactory : public factory
{
public:
    winfactory(){}
    virtual ~winfactory(){}
    button *createbutton(){return new winbutton;}
};

class macfactory : public factory
{
public:
    macfactory(){}
    virtual ~macfactory(){}
    button *createbutton(){return new macbutton;}
};

int main()
{
    factory *fc=new winfactory;
    button *bt=fc->createbutton();
    bt->showbutton();
    delete bt;
    delete fc;

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

    system("pause");
    return 0;
}
工厂方法模式是一种创建型设计模式,它定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类中进行。 在C++中,工厂方法模式通常涉及以下几个角色: 1. **产品**(Product):定义工厂方法创建的对象的接口。 2. **具体产品**(Concrete Product):实现了产品接口的具体类。 3. **创建者**(Creator):声明工厂方法,该方法返回一个产品类型的对象。创建者也可以提供一些默认的实现。 4. **具体创建者**(Concrete Creator):重写工厂方法以返回一个具体产品的实例。 工厂方法模式C++中的实现通常是这样子的: ```cpp #include <iostream> #include <memory> // 产品接口 class Product { public: virtual ~Product() {} virtual void Operation() const = 0; }; // 具体产品 class ConcreteProductA : public Product { public: void Operation() const override { std::cout << "ConcreteProductA" << std::endl; } }; // 具体产品 class ConcreteProductB : public Product { public: void Operation() const override { std::cout << "ConcreteProductB" << std::endl; } }; // 创建者 class Creator { public: virtual ~Creator() {} // 工厂方法 virtual std::unique_ptr<Product> FactoryMethod() const = 0; // 可能还有其他一些业务逻辑代码 void SomeOperation() const { // ... std::unique_ptr<Product> product = FactoryMethod(); product->Operation(); // ... } }; // 具体创建者 class ConcreteCreatorA : public Creator { public: std::unique_ptr<Product> FactoryMethod() const override { return std::make_unique<ConcreteProductA>(); } }; class ConcreteCreatorB : public Creator { public: std::unique_ptr<Product> FactoryMethod() const override { return std::make_unique<ConcreteProductB>(); } }; int main() { Creator* creator = new ConcreteCreatorA(); creator->SomeOperation(); creator = new ConcreteCreatorB(); creator->SomeOperation(); delete creator; return 0; } ``` 在这个例子中,`Creator` 类定义了一个可以创建 `Product` 的工厂方法 `FactoryMethod`。不同的 `ConcreteCreator` 类重写了这个方法来创建特定的产品对象。当 `Creator` 的 `SomeOperation` 方法被调用时,它会创建并使用一个产品对象,而具体的产品类型是在运行时决定的。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值