zoukankan      html  css  js  c++  java
  • 工厂类---抽象工厂(3)

      抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。

           抽象工厂模式可以向客户端提供一个接口,使其客户端在不必指定产品的具体类型情况下,能够创建多个产品族的产品对象

      工厂方法模式针对的是一个产品等级结构,而抽象工厂模式针对的是多个产品等级结构(产品族)。

      //抽象工厂 和 一般工厂模式相比较的话,产品的细化……

    class Fruit
    {
    public:
        virtual void sayName()
        {
            std::cout<<"Fruit"<<std::endl;
        }
    };
    
    class FruitFactory
    {
    public:
        virtual Fruit *getBanana()
        {
            std::cout<<"FruitFactory:getBanana"<<std::endl;
            return NULL;
        }
    
        virtual Fruit *getApple()
        {
            std::cout<<"FruitFactory:getApple"<<std::endl;
            return NULL;
        }
    
        virtual Fruit *getMg()
        {
            std::cout<<"FruitFactory:getMg"<<std::endl;
            return NULL;
        }
    };
    
    class SouthBanana : public Fruit
    {
    public:
        virtual void sayName()
        {
            std::cout<<"我是SouthBanana"<<std::endl;
        }
    };
    
    class SouthApple : public Fruit
    {
    public:
        virtual void sayName()
        {
            std::cout<<"我是SouthApple"<<std::endl;
        }
    };
    
    class SouthMg : public Fruit
    {
    public:
        virtual void sayName()
        {
            std::cout<<"我是SouthMg"<<std::endl;
        }
    };
    
    
    class NorthBanana : public Fruit
    {
    public:
        virtual void sayName()
        {
            std::cout<<"我是NorthBanana"<<std::endl;
        }
    };
    
    class NorthApple : public Fruit
    {
    public:
        virtual void sayName()
        {
            std::cout<<"我是NorthApple"<<std::endl;
        }
    };
    
    class NorthMg : public Fruit
    {
    public:
        virtual void sayName()
        {
            std::cout<<"我是NorthMg"<<std::endl;
        }
    };
    
    //NorthFactory
    class NorthFactory :public FruitFactory
    {
    public:
        virtual Fruit *getBanana()
        {
            return new NorthBanana();
        }
    
        virtual Fruit *getApple()
        {
            return new NorthApple();
        }
    
        virtual Fruit *getMg()
        {
            return new NorthMg();
        }
    };
    
    //SouthFactory
    class SouthFactory :public FruitFactory
    {
    public:
        virtual Fruit *getBanana()
        {
            return new SouthBanana();
        }
    
        virtual Fruit *getApple()
        {
            return new SouthApple();
        }
    
        virtual Fruit *getMg()
        {
            return new SouthMg();
        }
    };

     

    抽象工厂模式也就是不仅生产鼠标,同时生产键盘。
    也就是PC厂商是个父类,有生产鼠标,生产键盘两个接口。
    戴尔工厂,惠普工厂继承它,可以分别生产戴尔鼠标+戴尔键盘,和惠普鼠标+惠普键盘。
    创建工厂时,由戴尔工厂创建。
    后续工厂.生产鼠标()则生产戴尔鼠标,工厂.生产键盘()则生产戴尔键盘。

  • 相关阅读:
    【EmguCv】人脸/人眼检测
    iOS 9下Universal Link(通用链接)开发
    【JavaWeb】SpringMvc返回json
    【nlp】湖北师范大学贴吧帖子标题词频统计
    【C#】EAN-13条形码生成与识别
    【C#】身份证识别(三):身份证信息识别
    【C#】身份证识别(二):提取目标区域图像
    米勒罗宾素性测试算法简介+模板(转)
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/mathyk/p/9759224.html
Copyright © 2011-2022 走看看