2014年5月14日 星期三

Pluggable Object

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。

沒有留言:

張貼留言