• 抽象工厂模式 Abstract Factory


    百度百科:抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。

    //抽象工厂,对工厂抽象化,对同一类型工厂生成几个不同工厂
    
    #include<iostream>
    using namespace std;
    
    class Fruit{
    public:
        virtual void show() = 0;
    };
    
    class Apple:public Fruit{
    public:
        void show(){
            cout<<"i am an apple"<<endl;
        }
    };
    
    class Pear:public Fruit{
    public:
        void show(){
            cout<<"i am a pear"<<endl;
        }
    };
    
    class ShandongApple:public Apple{
    public:
        void show(){
            cout<<"i am an apple from shandong"<<endl;
        }
    };
    
    class FujianApple:public Apple{
    public:
        void show(){
            cout<<"i am an apple from fujian"<<endl;
        }
    };
    
    class ShandongPear:public Pear{
    public:
        void show(){
            cout<<"i am a pear from shandong"<<endl;
        }
    };
    
    class FujianPear:public Pear{
    public:
        void show(){
            cout<<"i am a pear from fujian"<<endl;
        }
    };
    
    class Factory{
    public:
        virtual Fruit * getPear() = 0;
        virtual Fruit * getApple() = 0;
    };
    
    class ShandongFactory:public Factory{
    public:
        Fruit * getPear(){
            return new ShandongPear();
        }
        Fruit * getApple(){
            return new ShandongApple();
        }
    };
    
    class FujianFactory:public Factory{
    public:
        Fruit * getPear(){
            return new FujianPear();
        }
        Fruit * getApple(){
            return new FujianApple();
        }
    };
    int main(int argc, char* argv[])
    {
        Factory * facshandong = new ShandongFactory();
        Fruit * psdapple = facshandong->getApple();
        Fruit * psdpear = facshandong->getPear();
        psdapple->show();
        psdpear->show();
    
        delete psdpear;
        delete psdapple;
        delete facshandong;
    
        Factory * facfujian = new FujianFactory();
        Fruit * pfjapple = facfujian->getApple();
        Fruit * pfjpear = facfujian->getPear();
        pfjapple->show();
        pfjpear->show();
    
        delete pfjpear;
        delete pfjapple;
        delete facfujian;
        return 0;
    }
  • 相关阅读:
    视频实时增强算法
    FFMPEG中关于ts流的时长估计的实现(转)
    从二维码技术看抢占技术至高点的重要性
    专家观点:不断茁壮的音频生态系统中心(转)
    理解音响系统和房间的相互作用---房间脉冲响应
    Fraunhofer音频技术为MPEG未来高品质3D音频内容传输的标准依据
    Cortex-A15架构解析:它为什么这么强(转)
    骨传导技术(转)
    Faker伪数据生成
    Python数据库连接池DBUtils
  • 原文地址:https://www.cnblogs.com/xiumukediao/p/4623803.html
Copyright © 2020-2023  润新知