建议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方法,即使增加再多的命名,也不需要对齐修改。


目录
相关文章
|
6月前
|
C++
【C++之多态】多态实现计算器功能
【C++之多态】多态实现计算器功能
|
Java 编译器 C++
C++基础语法(多态)
C++基础语法(多态)
38 0
|
5月前
多态的具体用法
多态的具体用法
32 1
|
6月前
|
存储 C++
C++中类和对象的多态性及其基本语法讲解
C++中类和对象的多态性及其基本语法讲解
29 1
|
6月前
|
C++
c++的函数重载的基本语法
c++的函数重载的基本语法
33 0
|
6月前
|
编译器 C++
C++类与对象【运算符重载】
C++类与对象【运算符重载】
|
11月前
|
安全 Java
多态语法详解
多态语法详解
54 1
|
安全 Java 编译器
代码块 继承 多态
代码块 继承 多态
47 0
|
存储 算法 编译器
C#OOP之二 变量和表达式
C#OOP之二 变量和表达式
39 0
|
Java
Java语法之多态
上次给大家分享了Java的继承,今天小编给大家分享面向对象三大特性的第三大特性,也就是多态,fighting~~
79 0
Java语法之多态