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。
沒有留言:
張貼留言