设计模式(五)桥接模式Bridge == Pointer To Implementation

来源:互联网 发布:什么软件可以汉化 编辑:程序博客网 时间:2024/06/15 02:28

意图:将抽象部分与实现部分分离,使它们都可以独立的变化。(核心在抽象,为了应对变更才有了不同的实现)
示例代码:
接口类sample
sample.h

#pragma once#include "boost/smart_ptr.hpp"using namespace boost;class imp;//只需要声明无需包含源文件class sample{public:sample(void);~sample(void);void print(void) const;private://当sample析构的时候会先调用成员变量的析构//pimp_的析构会引发引用计数为0,从而调用imp对象的析构boost::shared_ptr<imp> pimp_;};
sample.cpp

#include "sample.h"//必须包含定义#include "imp.h"#include<iostream>using namespace std;sample::sample(void):pimp_(new imp)//构造函数完成初始化,shared_ptr接受new返回的指针{cout<<"sample()"<<endl ;}sample::~sample(void){cout<<"~sample()"<<endl ;}void sample::print(void) const{this->pimp_->imp_print();//桥接:将业务类与实现类隔离开来}
实现类imp
imp.h

#pragma once//没必要继承sampleclass imp{public:imp(void);~imp(void);void imp_print(void) const;};
imp.cpp

#include "imp.h"#include<iostream>using namespace std;//这里修改之后的编译不会影响sample,以及main的重新编译imp::imp(void){cout<<"imp()"<<endl ;}imp::~imp(void){cout<<"~imp()"<<endl;}void imp::imp_print(void) const{cout<<"imp::pint()"<<endl;}
bridge_main.cpp

#include "sample.h"int main(int,char**){sample s;s.print();return 0;};


0 0
原创粉丝点击