橋接模式的這個骨頭過去感覺好一點了,因爲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;
}
//makefileadapter: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比較生疏,最終跌跌撞撞還是弄出來了,汗,求輕噴~