Pluggable Object是最近在Kent Beck寫得TDD by example中所看到的Design Pattern。其實就是用多型來處理重複的判斷條件。Kent Beck在書中以圖片編輯器為例,在圖片上按下滑鼠左鍵並移動滑鼠表示拖曳圖片移動。而在空白的地方按下左鍵移動滑鼠會出現方框,讓你一次選取多張圖片。這個流程如果寫成程式碼會長得像這樣:
Figure selected; public void mouseDown() { selected= findFigure(); if (selected != null) select(selected); } public void mouseMove() { if (selected != null) move(selected); else moveSelectionRectangle(); } public void mouseUp() { if (selected == null) selectAll(); }
你會發現有許多重複的判斷條件,該怎麼避免呢?這時候就可以用Pluggable Object。
首先先定義一個Interface叫做SelectionMode,這個Interface會有兩個函式分別是mouseMove()以及mouseUp(),並且建立兩個class(SingleSelection, MultipleSelection)實做此Interface,分別處理單一選取圖片以及多重選取圖片。如此一來整個程式碼可以被改寫如下:
SelectionMode mode; public void mouseDown() { selected = findFigure(); if (selected != null) mode = SingleSelection(selected); else mode = MultipleSelection(); } public void mouseMove() { mode.mouseMove(); } public void mouseUp() { mode.mouseUp(); }
程式碼變得乾淨整潔許多,這就是Pluggable Object。
沒有留言:
張貼留言