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

        这里主要讨论设计模式中的简单工厂模式。


    简介

        有些时候我们通过利用多态机制封装了一堆派生类,这些派生类会用到不同的地方。为了代码整洁,我们不希望将这些派生类加入到头文件中。此时,可以使用一个工厂类来管理这些派生类。下面就是一个粒子,

    #include <iostream>
    
    class Operation{
      public:
        virtual float getResult(const float a,const float b)=0;
    };
    
    class OperationAdd:public Operation
    {
      public:
        float getResult(const float a, const float b){
          return a+b;
        }
    };
    
    class OperationSub:public Operation
    {
      public:
        float getResult(const float a, const float b){
          return a-b;
        }
    };
    
    class OperationFactory{
      public:
        static Operation* getOperation(char op){
          Operation *oper;
          switch(op){
            case '+': oper = new OperationAdd();break;
            case '-': oper = new OperationSub();break;
            default: oper = nullptr;
          }
          return oper;
        }
    };
    
    int main(){
      Operation *oper1 = OperationFactory::getOperation('+');
      Operation *oper2 = OperationFactory::getOperation('-');
      float ret1 = oper1->getResult(1,2);
      float ret2 = oper2->getResult(3,2);
     
      std::cout<<"["<<ret1<<","<<ret2<<"]"<<std::endl; 
    
      return 0;
    }
    

        在这个粒子中,我们有一堆派生类OperationAdd,OperationSub等。通过工厂类OperationFactory,我们成功的屏蔽掉了这些派生类。对用户来说(注意main部分的代码),只需要通过基类的接口函数就可以使用自己想要的功能。


    Reference

        [1] 《大话设计模式》,程杰,第1章

  • 相关阅读:
    js/es6判断对象是否为空,并判断对象是否包含某个属性
    Hive中的SQL执行计划--几乎所有的SQL都有
    spark中的scalaAPI之RDDAPI常用操作
    spark-scala开发的第一个程序WordCount
    linux中添加自定义命令
    kafka学习总结
    flume的sink写入hive表
    Flume架构以及应用介绍(转)
    Appache Flume 中文介绍(转)
    hiveSQL常用日期函数
  • 原文地址:https://www.cnblogs.com/bluepcghost/p/9157297.html
Copyright © 2011-2022 走看看