情境假設:
假設我們有以上兩個class,他們的程式碼非常相近只有薪水不同,如果下次我們要增加FTE&CTE的員工要有一個middle name欄位,
那麼這兩個classes都必須修改,維護起來是一種負擔。
解決方法
接下來的解決方法,我會聯想到兩種解法。
1.Abstract class
2.Concrete class(Non-Abstract class)
先看如果使用的是Non-Abstract class 會有何事情發生?
首先,先把FullTime&CTE這兩個classes相同部分移至我們新建立的BaseEmployee Class
修改後的FullTime&CTE Class
新增的BaseEmployee Class放置上面兩個classes的相同之處。
之後要增加property or fiels都可以家在這個base class上。
問題來了,如果這時候程式碼如下:
在編譯時並不會出錯,但當編譯完執行後將會產生exception。
因為我們並沒有實作BaseClass的GetSalary Method。
所以使用Non-Abstract class在這裡並不是一個好作法。
使用Abstract Class
將BaseEmployee class 修改如下
FTE&CTE Employee Classes 修改如下:
修改幅度不大,只是override abstract method而已。
改成上述之後如果要在去呼叫baseclass的GetSalary Method,將會被提示錯誤。
如此便可以防止我們在程式編譯完後到執行階段才發現錯誤,以維護角度來說也比較好維護。