设计模式2-工厂方法模式-C++

 推荐文章:https://design-patterns.readthedocs.io/zh_CN/latest/index.html

客户端(main)需要指定某个设备生产出产品。

工厂模式需要显式调用工厂类,一个工厂类只生产一类产品。

    // 产品: 糖果
    class Sugar
    {
    public:
		// 展示产品
        virtual void showProduct() = 0;
    protected:
        Sugar() {}
    };

    // 工厂: 糖果生产厂
    class Factory
    {
    public:
		// 生产糖果
        virtual Sugar* createSugar() = 0;
    protected:
       Factory() {}
    };
	
	// 具体的糖果: 牛奶糖
    class MilkSugar : public Sugar
    {
    public:
        MilkSugar() :Sugar() {}
        void showProduct() override
        {
            cout << "MilkSugar" << endl;
        }
    };

	// 具体糖果: 花生糖
    class PeanutSugar : public Sugar
    {
    public:
        PeanutSugar():Sugar(){}
        void showProduct() override
        {
            cout << "PeanutSugar" << endl;
        }
    };

	// 具体工厂: 牛奶糖工厂
    class MilkSugarFactory : public Factory
    {
    public:
        MilkSugarFactory() :Factory(),m_sugar(NULL) {}
        ~MilkSugarFactory() { delete m_sugar; m_sugar = NULL; }
        Sugar* createSugar() override
        {
            m_sugar = new MilkSugar();
            return m_sugar;
        }

    private:
        Sugar* m_sugar;
    };

	// 具体工厂: 花生糖工厂
    class PeanutSugarFactory :public Factory
    {
    public:
        PeanutSugarFactory() :Factory(), m_sugar(NULL) {}
        ~PeanutSugarFactory() { delete m_sugar; m_sugar = NULL; }
        Sugar* createSugar() override
        {
            m_sugar = new PeanutSugar();
            return m_sugar;

        }
    private:
        Sugar* m_sugar;
    };

    int main()
    {
        // 牛奶糖工厂对象
        Factory* factory = new MilkSugarFactory();
		Sugar * sugar = factory->createSugar();
		sugar->showProduct();
        
        // 花生糖工厂对象
		Factory* factory2 = new PeanutSugarFactory();
		sugar = factory2->createSugar();
		sugar->showProduct();
    }

猜你喜欢

转载自blog.csdn.net/u010196624/article/details/88574827
今日推荐