該模式也相對(duì)簡(jiǎn)單。其主要處理的是這類問題:當(dāng)系統(tǒng)或某些模塊已經(jīng)成形后,突然需要增加某些功能。而這些功能的增加
在現(xiàn)有的對(duì)象中,暫時(shí)沒有辦法處理。同時(shí),卻發(fā)現(xiàn),該功能,其實(shí)另一模塊的對(duì)象卻可以處理的了。因此,就希望能夠在不修改原
有操作及系統(tǒng)結(jié)構(gòu)的情況下,就自然而然地將該功能實(shí)現(xiàn)出來。此時(shí),就可以使用Adapter來處理之。(注:在此,我們強(qiáng)調(diào)的是不
去修改原有系統(tǒng)的結(jié)構(gòu)的情況下)。
就上述問題,Adapter模式有兩種解決方法。一種是通過對(duì)象適配來解決。另一種是通過類適配來解決。所謂的對(duì)象適配,指
的是,通過引入具有我們需要功能接口的對(duì)象(設(shè)類為X),在實(shí)現(xiàn)處理過程中,我們使用的是X的功能接口,以此來達(dá)到我們的需求。
而類適配,則指的是,產(chǎn)生一個(gè)新類,讓該新類,繼承自X類,則自然,該新類就會(huì)有了X的相關(guān)接口。下面看下,這兩種適配的代碼。
對(duì)象適配
class X
{
public:
...
virtual func(...);
};
class ObjAdapterObject : public ...
{
public:
void func(...)
{
if (m_pXObj != NULL)
m_pXObj->func(...);
}
private:
X* m_pXObj;
};
類適配
class X的聲明及定義同上。
class ClassAdapterObject: public X, public ...
{
public:
...
};
以下調(diào)用就不寫了,你懂得的。