淺析設計模式之策略模式—:為什么總是繼承[1] uml模型
關鍵字:uml
在模板方法設計模式里我舉了一個例子:教育部規定了新生報到流程的算法骨架,然后這個算法骨架中的一些關鍵步驟由各高校自由的去發揮。我在這個例子中將高校設為一個抽象類,各高校要實現的算法步驟都是抽象方法。我還給出了兩個高校的實現代碼:清華大學和北京大學。在這個例子中本沒有什么問題,但是軟件總是會變的。
當有更多的高校要實現的時候,我們就會發現,很多高校的有些報到步驟實現是一樣的,這就存在子類中有大量的重復代碼,重復總是會出問題的。當然我們可以使用Martin Fowler的Pull Up Method(Refactoring P320)重構方法,將這些共同的部分推移到高校這個父類實現,并將這個抽象類改為virtual。
public abstract class 高校
{
public void 報到()
{
教務處報到();
繳費();
本院系報到();
教材科發教材();
}
protected abstract void 教務處報到();
//方法由抽象的更改為虛方法
protected virtual void 繳費()
{
//將這個方法在父類去實現,因為好多高校的實現都是這樣的,避免重復
}
protected abstract 專業等信息 本院系報到();
protected abstract 教材 教材科發教材();
}
但是,現在出現了這樣的情況:A,B,C等幾個大學的實現在某些步驟上有些相同,D,F在某些步驟的實現有些相同,也許你會說:這不好辦,繼續使用繼承唄,將共同的東西往上推,并且在“高校類”和各高校實現的類中間插入一些類,這些類將提供共同的實現。好像是個很好的辦法。來瞧一瞧:
文章來源于領測軟件測試網 http://www.kjueaiud.com/