情境假設:

假設我們有以上兩個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,將會被提示錯誤。

如此便可以防止我們在程式編譯完後到執行階段才發現錯誤,以維護角度來說也比較好維護。

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 melomelo1988 的頭像
    melomelo1988

    melo 唐

    melomelo1988 發表在 痞客邦 留言(0) 人氣()