《设计模式》勘误和疑问 《设计模式——可复用面向对象软件基础》中文翻译版 GoF著 吕建审校 机械工业出版社 勘误部分: P65:Builder模式结构图 Builder抽象类中应该有抽象增加一个抽象函数:GetResult() 原因: 1、 与后面的代码示例对应 2、 保证每个继承的类都有这个函数,以得到创建的对象 P121:Stream* &StreamA = new CompressingStream( new ASCII7Stream( new FileStream("aFileName")); 改为: Stream* &StreamA = new ASCII7Stream ( new CompressingStream ( new FileStream("aFileName")); 原因: 根据上面的说明“现在我们创建FileStream类,它首先将数据压缩,然后将压缩了的二进制数据转换成为7位ASCII码”可知是要先压缩,后才转换。 P153:文字的倒数第三行“Application不是HelpHandler的直接子类。” 改为: Application不是Widget的直接子类。 原因: 从下面的改马可以看出Application是HelpHanlder的直接子类。 当然:这里用Widget是我的猜测,也可能不对,不过原来的肯定是不对的。
其他一些打字错误就不提了!
疑问部分: P160:定义的模板类SimpleCommand除了有一个类参数Receiber之外,还定义了一个Action的成员函数,起初我觉得不需要。后来想想,如果我们肯定从一个类继承,那么保证这个类中有一个Action()是可以这样做的,不过这就固定了这个函数名,使用模板定义成员函数,可以使程序运行时更灵活,因为我们可以使用不同的函数名。 P183:Mediator模式中,我曾经认为Mediator模式很灵活,其实只是一种概念,用来提供交互功能,而增加其他类使用的灵活性。这些交互的Colleage具体类可以有不同接口。但是,考虑到为了容易的和Observer模式结合,这样的定义就更灵活。 P223~224:“可以不将操作静态地绑定在Element接口中,而将其安放在一个Visitor中,并使用Accept在运行时进行绑定。扩展Element接口就等于定义一个新的Visitor子类而不是多个新的Element子类。” 问题:这两句话说的是什么意思?我一直不能理解! by:kangtian0 e-mail:dunanshan@163.com QQ:22724092
|