• 设计模式 之 《工厂方法模式》


    GOOD:修正了简单工厂模式中不遵守开放-封闭原则。工厂方法模式把选择判断移到了客户端去实现,

    如果想添加新功能就不用修改原来的类,直接修改客户端即可。

    简单工厂是个什么东东,工厂模式是个什么西西,在这东东西西之间,存在着怎样南南北北的关系。

    下面就让我们揭开工厂方法模式的面纱,然后你可以同之前的简单工厂进行比较,看看他们之间的区别,比较一下各自的优缺点

    #ifndef __FACTORY_METHOD_MODEL__
    #define __FACTORY_METHOD_MODEL__
    
    #include <iostream>
    using namespace std;
    
    //实例基类 相当于Product
    class LeiFeng
    {
    public:
        virtual void sweep(){ cout<<"雷锋扫地"<<endl; }
    };
    
    //学雷锋的大学生,相当于 ConcreteProduct
    class Student : public LeiFeng
    {
    public:
        virtual void sweep(){ cout<<"大学生扫地"<<endl; }
    };
    
    //学雷锋的志愿者,相当于 ConcreteProduct
    class Volenter : public LeiFeng
    {
    public:
        virtual void sweep(){ cout<<"志愿者扫地"<<endl; }
    };
    
    //工厂基类 Creator
    class LeiFengFactory
    {
    public:
        virtual LeiFeng* createLeiFeng(){ return new LeiFeng(); }
    };
    
    //工厂具体类
    class StudentFactory : public LeiFengFactory
    {
    public:
        virtual LeiFeng* createLeiFeng(){ return new Student();}
    };
    
    class VolentorFactory : public LeiFengFactory
    {
    public:
        virtual LeiFeng* createLeiFeng(){ return new Volenter(); }
    };
    
    
    #endif //__FACTORY_METHOD_MODEL__
    
    
    
    《客户端代码》 #include
    "FactoryMethodModel.h" int _tmain(int argc, _TCHAR* argv[]) { //创建一个学生工厂的实例 调用学生工厂的createLeiFeng()函数 //创建学生的实例 调用学生的行为 LeiFengFactory* sf = new StudentFactory(); LeiFeng* s = sf->createLeiFeng(); s->sweep(); delete s; delete sf; return 0; }
  • 相关阅读:
    vue框架,后端框架选型
    appium,元素定位和元素操作,使用uiautomatorviewer
    appium,参数化,数据驱动
    Qt 应用程序无法正常启动0xc000007b
    NOI2021 游记
    NOI 2021 游记
    NOI2021 看台风记
    NOI2021 部分题目题解
    NOI2021游记
    vectorized case branch
  • 原文地址:https://www.cnblogs.com/MrGreen/p/3395726.html
Copyright © 2020-2023  润新知