zoukankan      html  css  js  c++  java
  • 抽象工厂模式 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;
    }
  • 相关阅读:
    哪个项目管理工具好用到哭?JIRA VS 华为软件开发云
    华为软件开发云CloudIDE功能简测
    移动APP云测试平台测评分析
    华为软件开发云对比Jenkins-JavaWeb项目持续部署方式
    微服务究竟该如何理解
    如何将Android Studio与华为软件开发云代码仓库无缝对接(二)
    如何将Android Studio与华为软件开发云代码仓库无缝对接(一)
    微服务,真的适合你么?
    如何更换git托管
    Redmine迁移至华为软件开发云-项目管理
  • 原文地址:https://www.cnblogs.com/xiumukediao/p/4623803.html
Copyright © 2011-2022 走看看