建议104:用多态代替条件语句

简介: 建议104:用多态代替条件语句

假设开发自动驾驶系统。在设计之初,自动驾驶系统拥有一个驾驶系统命令的枚举类型:


enum DriveCommand



      start,


      stop



又假设有一个驾驶的方法处理车辆接收到的指令。一开始我们这样编码:


static void Main(string[] args)


{

  DriveCommand comand=DriveCommand.Start;


  Drive(comand);


  comand=DriveCommand.Stop;


   Drive(command);


}


static void Drive(DriveCommand command)


{

    if(command==DriveCommand.Start)


    {

       //车辆启动


     } else if(command==DriveCommand.Stop)


      {

        //车辆停止


       }


}


或者用Switch:


static void Drive(DriveCommand command)


{

   switch(command)


    {

        case DriveCommand.Start:


            //车辆启动


             break;


       case  DriveCommand.Stop:


         //车辆停止


      break;


     default:


         break;


}


}


随着更多的功能被开发出来,我们加入的命令也越来越多。


enum DriveCommand



      start,


      stop,


      pause,


      turnLeft


         .


         .



随着DriveCommand元素的增加,采用if语句或switch语句会非常的混乱,在复杂的兄台你各种命令可能会多达上百条。每增加一个命令我们都要修改Drive方法。Drive方法将会及其膨胀,并且每一行的代码几乎一样。


在这种情况下,我们不得不考虑重构原来的代码,遵守设计模式中的开闭原则。开闭原则指的是:对扩展开放,修修改关闭。


设计个抽象类:


abstract class Commander



    public abstract void Execute();



所有的Start或者Stop之类的命令,继承这个抽象类。


class StartCommander:Commander



       public override void Execute()


        {

            //启动


        }



class StopCommander:Commander



       public override void Execute()


        {

            //停止


        }



使用多态后,下面的代码改为:


static void Main(string[] args)


{

    Commander commander=new StartCommander();


     Driver(commander);


     commander=new StopCommander();


     Driver(commander);


}


static void Drive(Commander commander)


{

    commander.Execute();


}


这样代码简洁了不少,并且,可扩展性增强了,对于Drive方法,即使增加再多的命名,也不需要对齐修改。


目录
相关文章
|
Java 编译器 C++
C++基础语法(多态)
C++基础语法(多态)
45 0
if条件语句的四种写法
if条件语句的四种写法
159 0
|
6月前
多态的具体用法
多态的具体用法
36 1
|
5月前
|
存储 编译器 C语言
c语言选择结构的switch语句的细节
c语言选择结构的switch语句的细节
|
7月前
|
C++
c++的函数重载的基本语法
c++的函数重载的基本语法
39 0
|
7月前
|
编译器 C++
C++类与对象【运算符重载】
C++类与对象【运算符重载】
|
安全 Java
多态语法详解
多态语法详解
60 1
|
安全 Java 编译器
代码块 继承 多态
代码块 继承 多态
50 0
|
Python
Python函数和代码复用
Python函数和代码复用
143 0