2008年6月21日 星期六

設計模式的二三事

這是在Wiki中有關Bridge Pattern所舉出的物件架構範例。
這個架構沒有什麼問題,問題在應用的範例上。
int main(void) {
DrawingAPI1 dap1;
DrawingAPI2 dap2;
CircleShape circle1(1,2,3,&dap1);
CircleShape circle2(5,7,11,&dap2);
circle1.resizeByPercentage(2.5);
circle2.resizeByPercentage(2.5);
circle1.draw();
circle2.draw();
return 0;
}這個範例,用了Bridge的架構,但卻沒有將Bridge的精神發揮出來。
這裡面有兩個circle,用不同的drawing api,這樣的需求,我們可以用更簡單的物件結構來做。
但是這麼一來,就跟Bridge Pattern無關了。
這讓我想到最近在書上讀到的一個觀念--不要為了使用Pattern而使用Pattern。要用Pattern來簡化設計,而不是讓Pattern把設計搞得更複雜。
好,所以說,這個範例應該改成這樣...
CircleShape1與TriangleShape1使用同樣的DrawingAPI1,CircleShape2與TriangleShape2則使用DrawingAPI2,這時候,Bridge Pattern就能夠將四種物件的關係簡化,變成這樣:
這個架構,跟原來的並沒有多大不同,但是能夠表達出Bridge的精神所在。

沒有留言: