C++面向对象高级编程(侯捷)——OO部分(二)

Delegation(委托) + Inheritance(继承)

1. 一个经典的例子,对于一个文档来说,可以同时有多个窗口去观察他。这些观察方式可以是相同的,也可以是不同的,比如对于同一组数据,我们可以开三个窗口,一个显示数据的柱状图,一个显示数据的饼状图,一个显示数据的表格。那么这样的设计应该如何实现呢?下面就是这种设计的一种经典解法,也是经典设计模式中的一种:观察者模式

class Subject就是表示数据的类,它和class Observer是委托的关系,也就是class Subject中放的是一堆class Observer的指针。里面有三个函数,attach负责绑定观察者和数据,在逻辑上简单地把观察者的指针放到class Subject的观察者指针容器中即可;set_val负责改变数据的值,当然数据值改变以后就得“通知”所有观察者,所以还有一个notify函数,在逻辑上就是调用每一个观察者的update函数。观察者可以拥有继承关系,观察者类的继承关系会使这个设计更为强大,所以update函数被设计为虚函数(在本例中是纯虚函数)

2. 另一个经典的例子:假如现在要实现一个文件系统,文件可以互相组合到一个目录下面,而目录又可以和其他目录或者其他文件一起组合到一个新的目录下面,那么这样应该如何设计呢?一种经典的解法如下图所示:这也是经典设计模式之一:组合模式(composite pattern)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值