程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 設計模式之適配器模式(C++實現)

設計模式之適配器模式(C++實現)

編輯:C++入門知識

在設計模式中,適配器模式(英語:adapter pattern)有時候也稱包裝樣式或者包裝。將一個類的接口轉接成用戶所期待的。一個適配使得因接口不兼容而不能在一起工作的類工作在一起,做法是將類別自己的接口包裹在一個已存在的類中。

有兩類適配器模式:

·對象適配器模式 - 在這種適配器模式中,適配器容納一個它我包裹的類的實例。在這種情況下,適配器調用被包裹對象的物理實體。

·類適配器模式 - 這種適配器模式下,適配器繼承自已實現的類(一般多重繼承來實現)。

 

由於在這裡類適配器我想不到什麼好一點的例子,就先說對象適配器吧,大家都知道C++ STL中的棧和隊列吧?在標准庫中有一個標准容器deque雙端隊列,他支持

前面刪除和插入,也支持後面刪除和插入,但是我們的queue是一個前出後進的,而stack是一個後進後出的,標准庫可並不去重新定義他們,而且是借助基容器實現的,默認的情況下用的deque 如果你想改變,也可以使用vector啊,只需要如下寫代碼:

stack <int,vector<int>>  sta;

就可以了,下面讓我們來完全實現一個適配器stack:

[cpp] 
template<class Type,class BaseCon = deque<Type>>  //模版默認參數指定為deque  
class Stack 

private: 
    BaseCon stack;          //定義基容器  
public: 
    void push(Type elem) 
    { 
        stack.push_back(elem); 
    } 
 
    void pop() 
    { 
        stack.pop_back(); 
    } 
 
    Type & top() 
    { 
        return stack.back(); 
    } 
 
    bool empty() 
    { 
        return stack.empty(); 
    } 
 
    signed int size() 
    { 
        return stack.size(); 
    } 
}; 
 
 
int main() 

    Stack<int,vector<int>> stack; 
    for(int i=1;i<10;i++) 
    stack.push(i); 
    while( !stack.empty() ) 
    { 
        cout<<stack.top(); 
        stack.pop(); 
    } 
    system("pause"); 
    return 0; 

template<class Type,class BaseCon = deque<Type>>  //模版默認參數指定為deque
class Stack
{
private:
 BaseCon stack;          //定義基容器
public:
 void push(Type elem)
 {
  stack.push_back(elem);
 }

 void pop()
 {
  stack.pop_back();
 }

 Type & top()
 {
  return stack.back();
 }

 bool empty()
 {
  return stack.empty();
 }

 signed int size()
 {
  return stack.size();
 }
};


int main()
{
 Stack<int,vector<int>> stack;
 for(int i=1;i<10;i++)
 stack.push(i);
 while( !stack.empty() )
 {
  cout<<stack.top();
  stack.pop();
 }
 system("pause");
 return 0;
}不知道上面這個例子我有沒有扯遠,我個人比較喜歡STL,也研究過他的源碼,最近也在想著模仿stl寫一個自己的庫

回到正題,這個程序中的satck也就是標准庫中標准實現的棧,只是這裡我找不到以前寫的那個內存分配器,不然就可以完全模擬並改編了,該stack就叫做容器的適配器,他以現成的接口,轉變為自己想要的接口,這就是適配器模式,在標准庫中的迭代器適配器,和函數對象適配器都是采用這種模式,比如迭代器適配器中的back_insert迭代器,就是借助了標准容器的push_back函數,一定要有這個函數的容器才可以用這個back_insert,相信也很好理解了,晚了,睡覺了!!

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved