zoukankan      html  css  js  c++  java
  • 设计模式-简单工厂模式

    简单工厂模式属于类的创建型模式,又叫静态工厂方法模式。通过站门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。

    1.工厂角色:简单工厂模式的核心,他负责实现创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需的产品对象。

    2.抽象角色:简单工厂所创建的所有对象的父类,它负责描述所有实例共有的公共接口。

    3.具体产品角色:简单工厂模式所创建的具体实例对象。

    简单工厂的优缺点:在这个模式中,工厂类是整个模式的关键所在。它包含必要的逻辑判断,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户可以在使用时直接根据工厂去创建所需要的实例,而无需了解这些对象是如何被创建以及被组织的。有利于整个软件体系结构的优化。不难发现,简单工厂的缺点也正体现在其它工厂上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的不好。另外,当系统中的具体产品不断增多时,可能出现要求工厂类也需要做出相应的扩展,扩展性不好。

    具体实现的例子:

    #include <iostream>
    #include <string>
    using namespace std;
    
    class Fruit{
    public:
        virtual void getFruit(){
            cout<<"Fruit::getFruit"<<endl;
        }
    };
    
    class Pear:public Fruit{
    public:
        virtual void getFruit(){
            cout<<"Pear::getFruit"<<endl;
        }
    };
    
    class Banana:public Fruit{
    public:
        virtual void getFruit(){
            cout<<"Banana::getFruit"<<endl;
        }
    };
    
    // 工厂类:与实际的Pear、Banana的关系为依赖关系
    class Factory{
    public:
        static Fruit *create(string name){
            if(name == "Pear"){
                return new Pear;
            }else if(name == "Banana"){
                return new Banana;
            }else{
                return nullptr;
            }
        }
    };
    
    int main(int argc, const char * argv[]) {
        Fruit *f = nullptr;
        f = Factory::create("Pear");
        f->getFruit();
        
        f = Factory::create("Banana");
        f->getFruit();
        return 0;
    }
    

      运行结果:

     

  • 相关阅读:
    方法的重载理解
    JAVA 三种循环的总结
    模拟时间倒计时
    制作漂浮广告效果
    js+css+html实现抽奖小程序
    将系统时间转换为汉字表示的四种方法
    简单的导航栏
    模仿光标闪烁,光标移动,自动切换背景
    sublime插件emmet安装和使用
    现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1)。每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转。问最少需要移动几步。
  • 原文地址:https://www.cnblogs.com/xuelisheng/p/9744813.html
Copyright © 2011-2022 走看看