《设计模式》勘误和疑问
《设计模式——可复用面向对象软件基础》中文翻译版 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