我与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比较生疏,最终跌跌撞撞还是弄出来了,汗,求轻喷~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值