對if/else重構

以前在 csdn上看到一篇  “你還在使用if/else嗎?”文章,提到如果你還在使用if語句,那麼你就需要對你的代碼重構。那篇文章許多人的評論上褒貶不一,但我現在想舉的一個例子是對if/else的重構。(當然,是從別人那偷學來的,^_^)。

enum employeetype

{

     salers;

     engineer;

   manager;

}

if(employee==emloyeetype.salers)

{

      //如何發工資

}

else if(employee==employeetype.manager)

{

   //如何發工資

}

//................

這樣寫未嘗不可,但是如果要是新加入一個角色,那麼會如何處理呢?你就需要修改哪個枚舉,並且後貼上個if/else,那麼我按照面向對象的想法來實現重構呢?

abstract class employee

{

//.....getsalary   abstract

}

class manager:employee

{

//.....      override method

}

//......other roles   classes

class Salary

{

    static void Main()

{

   employee em = new Manager();

em.Getsalary();

 

}

}

 

 

這個例子是用多態來解決if/else結構中的多重選擇問題,使得但變化來臨時,只需要對系統進行擴展,而不是修改,開閉原則(ocp)即是此意。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章