欢迎来到天天文库
浏览记录
ID:47097278
大小:156.00 KB
页数:22页
时间:2019-07-30
《c++设计模式(精简版)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、C++设计模式一、功能 将一个类的接口转换成客户希望的另外一个接口,解决两个已有接口之间不匹配的问题。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。二、结构图 (1)classadapter (2)objectadapter 三、实现 和其他很多模式一样,学习设计模式的重点是学习每种模式的思想,而不应拘泥于它的某种具体结构图和实现。因为模式是灵活的,其实现可以是千变万化的,只是所谓万变不离其宗。在STL中大量运用了Adapter模式,象functionadapter、itera
2、toradpter,它们与这里说的adapter结构并不一样,但思想是一样的。具体的介绍可到侯捷网站上找相关文章,他讲得非常好。 四、示例代码 (1)classadapternamespaceDesignPattern_Adapter{//classAdapteeclassAdaptee{public:voidSpecialRequest(){}};//classTargetclassTarget{public:virtualvoidRequest()=0;};//classAdapterclassAdapter:pu
3、blicTarget,privateAdaptee{public:virtualvoidRequest(){SpecialRequest();}};}客户端代码:{usingnamespaceDesignPattern_Adapter;Target*p=newAdapter();p->Request();//实际上调用的是Adaptee::SpecialRequest()}(2)objectadapternamespaceDesignPattern_Adapter{//classAdapteeclassAdaptee{pu
4、blic:voidSpecialRequest(){}};//classTargetclassTarget{public:virtualvoidRequest()=0;};//classAdapterclassAdapter:publicTarget{public:virtualvoidRequest(){_adaptee.SpecialRequest();}private:Adaptee_adaptee;};}客户端代码:{usingnamespaceDesignPattern_Adapter;Target*p=newA
5、dapter();p->Request();//实际上调用的是Adaptee::SpecialRequest()} 六、实例 (1)STL中的ClassAdapter STL中的AdapterClass包括:a.stack(对应的adaptee是deque)。b.queue(对应的adaptee是deque)。c.priority_queue(对应的adaptee是vector)。下面是从VC中的拷出的stack的类定义:templateclass_Container=deque<_Ty>>classs
6、tack{//LIFOqueueimplementedwithacontainerpublic:typedef_Containercontainer_type;typedeftypename_Container::value_typevalue_type;typedeftypename_Container::size_typesize_type;stack():c(){//constructwithemptycontainer}explicitstack(const_Container&_Cont):c(_Cont){//
7、constructbycopyingspecifiedcontainer}boolempty()const{//testifstackisemptyreturn(c.empty());}size_typesize()const{//testlengthofstackreturn(c.size());}value_type&top(){//returnlastelementofmutablestackreturn(c.back());}constvalue_type&top()const{//returnlastelemen
8、tofnonmutablestackreturn(c.back());}voidpush(constvalue_type&_Val){//insertelementatendc.push_back(_Val);}voidpop(){//eraselastelementc.pop_back();}bool
此文档下载收益归作者所有