執行結果
Hello Adaptee!!
Consequence
Class Adapter和Object Adapter各有優缺點:
Class Adapter
優點:
1.容易override Adaptee原本的行為。
因為Class Adapter繼承了Adaptee,所以可以輕易的override Adaptee。
2.代碼較精簡。
缺點:
1.只能轉換單一Adaptee。
因為使用繼承技術,所以Class Adapter的內容會綁死在特定的Adaptee的concreate class或derived class身上,因此Class Adapter無法同時轉換多個Adaptee。(若配合泛型技術,可以解掉此問題,請參閱(原創) 我的Design Pattern之旅[7]:使用泛型改進Adapter Pattern (OO) (Design Pattern) (C/C++) (template) (C++/CLI)。
2.無法動態改變欲轉換的Adaptee。
因為使用繼承技術,在compile-time已經決定了要繼承的Adaptee,所以無法動態改變Adaptee。
Object Adapter
優點:
1.可轉換多個Adaptee。
因為使用了組合技術,配合polymorphism(多型/多態),所以能轉換class和其derived class。
2.可動態改變欲轉換的Adaptee。
因為使用了組合技術,可以在run-time的改變欲轉換的Adaptee。
缺點:
1.較難override Adaptee原本的行為。
若需override Adaptee原本的行為,必須先繼承Adaptee之後,override之,然後Adapter再組合Adaptee的driverd class。
2.代碼較多。
Class Adapter和Object Adapter優缺點剛好互補,可依實際需求決定之,大體上而言,Object Adapter優於Class Adapter,因為彈性較大,且可面對將來未知的class,也應證了那句『多用組合,少用繼承』的Design Pattern三句真言。