生活随笔
收集整理的這篇文章主要介紹了
设计模式C++实现(6)——适配器模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?軟件領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了面向對象編程語言的重要特性:封裝、繼承、多態,真正領悟設計模式的精髓是可能一個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對于每個模式,用C++寫了個小例子,加深一下理解。主要參考《大話設計模式》和《設計模式:可復用面向對象軟件的基礎》(DP)兩本書。本文介紹適配器模式的實現。
?? ? ? ?DP上的定義:適配器模式將一個類的接口轉換成客戶希望的另外一個接口,使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。它包括類適配器和對象適配器,本文針對的是對象適配器。舉個例子,在STL中就用到了適配器模式。STL實現了一種數據結構,稱為雙端隊列(deque),支持前后兩段的插入與刪除。STL實現棧和隊列時,沒有從頭開始定義它們,而是直接使用雙端隊列實現的。這里雙端隊列就扮演了適配器的角色。隊列用到了它的后端插入,前端刪除。而棧用到了它的后端插入,后端刪除。假設棧和隊列都是一種順序容器,有兩種操作:壓入和彈出。下面給出相應的UML圖,與DP上的圖差不多。
?? ? ? ?根據上面的UML圖,很容易給出實現。
[cpp]?view plaincopyprint?
?? class?Deque?? {?? public:?? ????void?push_back(int?x)?{?cout<<"Deque?push_back"<<endl;?}?? ????void?push_front(int?x)?{?cout<<"Deque?push_front"<<endl;?}?? ????void?pop_back()?{?cout<<"Deque?pop_back"<<endl;?}?? ????void?pop_front()?{?cout<<"Deque?pop_front"<<endl;?}?? };?? ?? class?Sequence?? {?? public:?? ????virtual?void?push(int?x)?=?0;?? ????virtual?void?pop()?=?0;?? };?? ?? class?Stack:?public?Sequence?? {?? public:?? ????void?push(int?x)?{?deque.push_back(x);?}?? ????void?pop()?{?deque.pop_back();?}?? private:?? ????Deque?deque;??? };?? ?? class?Queue:?public?Sequence?? {?? public:?? ????void?push(int?x)?{?deque.push_back(x);?}?? ????void?pop()?{?deque.pop_front();?}?? private:?? ????Deque?deque;??? };??
?? ? ? 使用方式如下:
[cpp]?view plaincopyprint?
int?main()?? {?? ????Sequence?*s1?=?new?Stack();?? ????Sequence?*s2?=?new?Queue();?? ????s1->push(1);?s1->pop();?? ????s2->push(1);?s2->pop();?? ????delete?s1;?delete?s2;?? ????return?0;?? }??
?? ? ??本人享有博客文章的版權,轉載請標明出處?http://blog.csdn.net/wuzhekai1985
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的设计模式C++实现(6)——适配器模式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。