zoukankan      html  css  js  c++  java
  • [Design Pattern] 抽象工厂模式

    抽象工厂模式

    抽象工厂针对产品族,不针对产品等级结构

    产品族:同一产地同一个厂商,功能不同。

    产品等级结构:功能相同,但是产地和厂商不同。

    class AbstractApple
    {
    public:
        virtual void showName() = 0;
    };
    class ChApple : public AbstractApple
    {
    public:
        virtual void showName()
        {
            cout << "Ch Apple." << endl;
        }
    };
    class USAApple : public AbstractApple
    {
    public:
        virtual void showName()
        {
            cout << "USA Apple." << endl;
        }
    };
    class JpApple : public AbstractApple
    {
    public:
        virtual void showName()
        {
            cout << "Jp Apple." << endl;
        }
    };
    
    class AbstractBanana
    {
    public:
        virtual void showName() = 0;
    };
    class ChBanana : public AbstractBanana
    {
    public:
        virtual void showName()
        {
            cout << "Ch Banana." << endl;
        }
    };
    class USABanana : public AbstractBanana
    {
    public:
        virtual void showName()
        {
            cout << "USA Banana." << endl;
        }
    };
    class JpBanana : public AbstractBanana
    {
    public:
        virtual void showName()
        {
            cout << "Jp Banana." << endl;
        }
    }; 
    class AbstractPear
    {
    public:
        virtual void showName() = 0;
    };
    class ChPear : public AbstractPear
    {
    public:
        virtual void showName()
        {
            cout << "Ch Pear." << endl;
        }
    };
    class USAPear : public AbstractPear
    {
    public:
        virtual void showName()
        {
            cout << "USA Banana." << endl;
        }
    };
    
    class JpPear : public AbstractPear
    {
    public:
        virtual void showName()
        {
            cout << "Jp Pear." << endl;
        }
    };
    
    class AbstractFactory
    {
    public:
        virtual AbstractApple* createApple() = 0;
        virtual AbstractBanana* createBanana() = 0;
        virtual AbstractPear* createPear() = 0;
    };
    
    class ChFactory : AbstractFactory
    {
    public:
        virtual AbstractApple* createApple()
        {
            return new ChApple();
        }
        virtual AbstractBanana* createBanana()
        {
            return new ChBanana();
        }
        virtual AbstractPear* createPear()
        {
            return new ChPear();
        }
    };
    class USAFactory : AbstractFactory
    {
    public:
        virtual AbstractApple* createApple()
        {
            return new USAApple();
        }
        virtual AbstractBanana* createBanana()
        {
            return new USABanana();
        }
        virtual AbstractPear* createPear()
        {
            return new USAPear();
        }
    };
    class JpFactory : AbstractFactory
    {
    public:
        virtual AbstractApple* createApple()
        {
            return new JpApple();
        }
        virtual AbstractBanana* createBanana()
        {
            return new JpBanana();
        }
        virtual AbstractPear* createPear()
        {
            return new JpPear();
        }
    };
  • 相关阅读:
    微信小程序 | 小程序的转发问题
    开发辅助 | 前端开发工程师必懂的 UI 知识
    微信小程序 | canvas绘图
    服务端 | Linux 学习总结 (一)
    移动端适配 | 适配方案总结
    开发工具 | 利用 deployd 搭建个人博客
    1.10 组织好代码文件,要有“用户思维”
    1.9 组织好代码段,让人对它“一见钟情”
    《计算机是怎样跑起来的》读书笔记(1)
    实用网站收藏
  • 原文地址:https://www.cnblogs.com/immjc/p/9120830.html
Copyright © 2011-2022 走看看