一种实现更精确明了组合的设计
来源:互联网 发布:mac 恢复出厂设置 apfs 编辑:程序博客网 时间:2024/05/15 14:55
namespace A_Program{struct DB{virtual void get_par(){ cout<<"DB get_par"<<endl; }virtual void set_par(){ cout<<"DB set_par"<<endl; }};struct Buf{virtual void get_par(){ cout<<"Buf get_par"<<endl; }virtual void set_par(){ cout<<"Buf set_par"<<endl; }};template< class _T >struct Role: public _T{virtual void get_par(){ _T::get_par(); }virtual void set_par(){ _T::set_par(); }};}namespace B_Program{struct Role{virtual void get_par() = 0;virtual void set_par() = 0;};struct DB: public Role{virtual void get_par(){ cout<<"DB get_par"<<endl; }virtual void set_par(){ cout<<"DB set_par"<<endl; }};struct Buf: public Role{virtual void get_par(){ cout<<"Buf get_par"<<endl; }virtual void set_par(){ cout<<"Buf set_par"<<endl; }};}namespace C_Program{struct IRole{virtual void get_par() = 0;virtual void set_par() = 0;};struct DB{virtual void get_par(){ cout<<"DB get_par"<<endl; }virtual void set_par(){ cout<<"DB set_par"<<endl; }};struct Buf{virtual void get_par(){ cout<<"Buf get_par"<<endl; }virtual void set_par(){ cout<<"Buf set_par"<<endl; }};template< class _T >struct Role: public IRole, public _T{virtual void get_par(){ _T::get_par(); }virtual void set_par(){ _T::set_par(); }};}void main(){A_Program::Role< A_Program::DB > testA;testA.set_par();B_Program::Role* p_testB = &(B_Program::DB());p_testB->set_par();C_Program::IRole* p_testC = &(C_Program::Role< C_Program::DB >());p_testC->set_par();system("pause");}
//初看下两种实现方案都没什么区别, 但是事实上
//方案A实现了更精确明了的设计。其基类DB和Buf是不可能更改到Role的其它不相关数据,它对权限的把控和分工更严格。
//而方案B则充许了相关子类修改Role其它数据的权利, 除非这种充许是设计的一部份, 否则这种充许增加了编码出错的可能性和增加了使用者的迷惑,同时也给偏离设计目标的实现提供了途径。
//在效率上,方案A是静态组合,方案B是动态组合。 方案A速度更快, 但灵活性不如方案B,因为方案B可以在执行期动态改变所指对象。 但如果真有执行期的需求, 方案A加多一个基类套子也可适应。
//方案C结合了A和B的优点。把继承组合交由应用层去决定,从而避免类库的臃肿(增加新的类,不用相应提供新的组合类), 精炼了类库的逻辑。
- 一种实现更精确明了组合的设计
- 更精确的思维
- 数学中组合的一种递归实现
- 一种简洁明了地读取文本文件的方法
- oo设计中 一种关系组合 的两种实现 + 一个复杂关系 的两种实现
- 贪心法设计一种更快的作业排序算法
- 贪心法设计一种更快的作业排序算法
- asp.net实现组合查询的一种方法
- 一种分割与组合文件的方法-Java实现
- 更精确的获取时间的方法
- 更精确的RSS Feeds搜索引擎 - Feedmil
- 更精确的使用浮点数
- 更精确的使用浮点型
- Java中更精确的计时
- 设计模式:工厂和原型(清晰明了的对比)
- 简洁明了的优秀UI设计原则(1)
- 简洁明了的优秀UI设计原则(2)
- 简洁明了的优秀UI设计原则(3)
- HTML <dl> 标签
- MySQL的数据库引擎的类型
- android学习
- plsql developer 注册码
- HTML <address> 标签
- 一种实现更精确明了组合的设计
- 图像处理常用算法GPU实现一:图像二值化
- 扪心第七想 顺其自然是对的
- SQLserver锁和事务隔离级别的比较与使用
- 编程复杂性等级划分
- 东方程序员怎么看西方程序员
- MFC控件使用说明(combo box Button Check Box Radio Button List Control Edit Box Hot Key IP Address....)
- QT -4.8.2安装的简单介绍
- 单元测试利器——Mockito