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;
    }
  • 相关阅读:
    FireGestures 火狐手势插件 使用
    计算分段采样区间中的平均值,标准差,中位数,积分值等的类
    DWR与Spring结合
    项目总结
    在线机器学习算法及其伪代码
    Hdu 1394 Minimum Inversion Number、Poj 2299 UltraQuickSort
    Ubuntn 安装sendmail并把硬盘空间信息发送到指定邮箱
    iPhone应用程序开发使用Core Data (一)
    [置顶] C++里被人遗忘的智能指针
    HTML标签p和div的不同
  • 原文地址:https://www.cnblogs.com/xiumukediao/p/4623803.html
Copyright © 2011-2022 走看看