我與C++設計模式(六)——適配器

橋接模式的這個骨頭過去感覺好一點了,因爲Adapter不是那麼複雜了。

適配器模式要解決的問題很簡單:就是將一個你想用又不能直接用的通過一種中間類變成你能用的。(不知道這麼說對不對)生活中,我們不也有過將三頭插頭轉成兩頭的麼。


其實將Adaptee(我們的目的)放到Adapter中作爲成員來管理,Adaptee的接口也放在Adapter中封裝,這樣就完成轉換了,變成兩腳插頭了,Adaptee的設計要用一次多態,繼承自Adapter,給Client作爲接口。代碼應該不用了,暫略,我明天早上來寫。

-----------------------------------10.2-----------------------------------------------------

信守諾言,上代碼:

//----target------

#ifndef _TARGET_H__
#define _TARGET_H__

class Target
{
        public:
                Target();
                virtual ~Target();

                virtual void request() = 0;
};

#endif

#include "target.h"

Target::Target()
{
}

Target::~Target()
{
}
//-----adaptee-----
class Adaptee
{
        public:
                Adaptee();
                ~Adaptee();

                void special_request();
};

#endif

//adaptee.cpp

#include "adaptee.h"
#include <iostream>
using namespace std;

Adaptee::Adaptee()
{
}

Adaptee::~Adaptee()
{
}

void Adaptee::special_request()
{
        cout<<"SPECIAL REQUEST FROM ADAPTEE"<<endl;
}
//-----adapter-------
#ifndef _ADAPTER_H__
#define _ADAPTER_H__
#include "target.h"
#include "adaptee.h"

class Adapter:public Target
{
        public:
                Adapter();

                ~Adapter();

                void request();

        private:
                Adaptee *adaptee_;

};

#endif

#include "adapter.h"

Adapter::Adapter():
        adaptee_(new Adaptee())
{
}
Adapter::~Adapter()
{
}

void Adapter::request()
{
        adaptee_->special_request();
}
//-----client-----
#include "adapter.h"
#include <iostream>
using namespace std;

int main(int argc, char **argv)
{
        Target *tar = new Adapter();
        tar->request();
        cout<<"1"<<endl;
        return 0;
}
//makefile
adapter:main.o adaptee.o target.o adapter.o
        g++ -o adapter main.o adaptee.o target.o adapter.o

main.o:main.cpp adapter.h
        g++ -o main.o -c main.cpp

adaptee.o:adaptee.h adaptee.cpp
        g++ -o adaptee.o -c adaptee.cpp

target.o:target.h target.cpp
        g++ -o target.o -c target.cpp

adapter.o:adapter.h adapter.cpp adaptee.h target.h
        g++ -o adapter.o -c adapter.cpp

clean:
        rm -f *.o

我真的沒想到這個代碼竟然整到現在,除了makefile之外的那些都不難,就當我在linux上準備運行時,一切都不那麼順利,我很少在linux上跑c++,這次算是還債了,makefile比較生疏,最終跌跌撞撞還是弄出來了,汗,求輕噴~
發佈了33 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章