三种工厂模式

本文介绍了三种工厂模式在C++中的实现:简单工厂模式、抽象工厂模式和工厂方法模式。通过示例代码展示了如何创建和使用这些模式,强调了它们在软件设计中的开闭原则和灵活性。简单工厂模式适用于简单创建对象,而抽象工厂模式和工厂方法模式则提供了更高级别的抽象,允许扩展以适应不同种类的产品或平台。
摘要由CSDN通过智能技术生成

三种工厂模式

三种工厂模式

#include<iostream>
//简单工厂模式 没有开闭原则 需要自己去判断创建了什么类
/*
class AbstractFruit
{
public:
    virtual void Showname() = 0;
};

class Apple : public AbstractFruit
{
public:
    virtual void Showname()
    {
        std::cout << "我是苹果" << std::endl;
    }
};

class Pear : public AbstractFruit
{
public:
    virtual void Showname()
    {
        std::cout << "我是鸭梨" << std::endl;
    }
};

class Peach : public AbstractFruit
{
public:
    virtual void Showname()
    {
        std::cout << "我是桃子" << std::endl;
    }
};

//定义水果工厂
class Factory
{
public:
    static AbstractFruit* CreateFruit(std::string flag)
    {
        if(flag == "apple")
        {
            return new Apple;
        }
        else if(flag == "Pear")
        {
            return new Pear;
        }
        else if(flag == "peach")
        {
            return new Peach;
        }
    }
};
*/

/*
//定义水果基类和抽象水果
class AbstractFruit
{
public:
    virtual void Showname() = 0;
};
class Appale : public AbstractFruit
{
public:
    virtual void Showname()
    {
        std::cout << "我是Apple" << std::endl;
    }
};
class Pear : public AbstractFruit
{
public:
    virtual void Showname()
    {
        std::cout << "我是Pear" << std::endl;
    }
};
//定义抽象工厂
class AbstractFuritFactory
{
public:
    virtual AbstractFruit* CreaterFruit() = 0;
};
class AppleFactory:public AbstractFuritFactory
{
    virtual AbstractFruit* CreaterFruit()
    {
        return new Appale;
    }
};
class PearFactory:public AbstractFuritFactory
{
    virtual AbstractFruit* CreaterFruit()
    {
        return new Pear;
    }
};

*/

// 抽象工厂
class AbstractFruit
{
    public:
        virtual void operation() = 0;
};

class Apple:public AbstractFruit
{
    public:
        void operation()
        {
            std::cout << "this is Apple" << std::endl;
        }
};

class Banana:public AbstractFruit
{
    public:
        void operation()
        {
            std::cout << "this is Banana" << std::endl;
        }
};

class AbstractFactory
{
    public:
        virtual AbstractFruit* CreateFruit() = 0;
};

//按照地域类型抽象 比如水果分为有核水果和没核水果
class AFactory:public AbstractFactory
{
    AbstractFruit* CreateFruit()
    {
        return new Banana();
    }
};

int main()
{
    /*工厂
    AbstractFuritFactory* factory = nullptr;
    AbstractFruit* fruit = nullptr;

    factory = new AppleFactory();
    fruit = factory->CreaterFruit();
    */
	factory = new Afactory();		
	Banana = factory->CreateFruit();		
	Banana->operation();	


    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值