以前在 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)即是此意。