伍迷家园

让编程融入生活
随笔 - 92, 文章 - 0, 评论 - 2113, 引用 - 172
数据加载中……

《大话设计模式》勘误

    尽管已经很仔细的检查和审核,但错误还是没有能避免。在此向已经购买了本书的读者诚意地说声抱歉。现勘误如下:

    1.01    P2 上方代码第二行,“if (O == "/") ”,应将"O"改为"B",本页第二段代码的倒数第五行,也是相同的错误,应将"O"改为"B"。

    1.02    P157 15.9节,第四段,"再添加引用System.configuratio15.",应将"15."改为"n".

    1.03    P61,第8行,原文:“你仔细观察一下,‘Pursuit(追求者)’和‘SchoolGirl(被追求者)’有没有相似的地方”?” 改为:“你仔细观察一下,‘Pursuit(追求者)’和‘Proxy(代理)’有没有相似的地方”?” 第9行,原文:“...三个方法,只不过‘SchoolGirl(被追求者)’送的礼物是‘Pursuit(追求者)’买的...” 改为:“...三个方法,只不过‘Proxy(代理)’送的礼物是‘Pursuit(追求者)’买的...” (trong  提供)

    1.04    P119,第4行,原文:“具体的小人,具体实现如何画出小人的头身手脚各个部分。” 改为:“具体的小人建造者,具体实现如何画出小人的头身手脚各个部分。” (trong  提供)

    1.05    P259 图 图中Colleague到Mediator之间的连线不应该多一个聚合关系而应该是关联关系。 (trong  提供)

    1.06    P271中间代码:原文:"UnsharedConcreteFlyweight uf = new UnsharedConcreteFlyweight();" 改为:"Flyweight uf = new UnsharedConcreteFlyweight(); "将更加准确。(trong  提供)

    1.07    P220 第1行 原文:“大鸟,棒着个手机,玩什么呢?"  其中“棒”改为:“捧” (cqchi 提供)

    1.08    P347 第5行 "简单理解就是耦断丝连" 更改为:"简单理解就是藕断丝连" (cqchi 提供)

    1.09    P84 9.5节 第1行 “你现在‘简历’对象里的数据都是string类型的,也就是值类型....”其中“也就是值类型”改为“而string是一种拥有值类型特点的特殊引用类型” (心界使者 提供)

    1.10    P10 在1.10前,增加文字如下“(作者注:以上代码读者如果阅读吃力,说明您对继承、多态、虚方法、方法重写等概念的理解不够,建议先阅读本书附录一,理解这些基本概念后再继续往下阅读。)

    1.11    P359 第4行“所以我们可以应用集合的RemoveRt方法...” 其中“RemoveRt”改为“RemoveAt”(心界使者 提供)

    1.12    P233 第2行:“哈,小菜说的和GoF说的不就是一会事吗!” 其中“一会事”改为“一回事”(心界使者 提供)

以上为二次重印时已修正的错误,以下为重印后发现的错误,特公告如下。

    2.01    P86 “客户端调用代码”下方代码第10行与第11行之间,即在“Resume c = (Resume)a.Clone();”与“c.SetWorkExperience("1998-2003", "ZZ企业");”之间加上一行代码:“c.SetPersonalInfo("男", "24"); ” (钢琴诗人 提供)

    2.02    P49 倒数第4行,"你的意思是,应该在内部组装完闭" ,其中“完闭”应该为"完毕" (cqchi 提供)

    2.03    P228 末尾代码,“class HandsetMP3 : HandSoft ”其中"HandSoft"应改为"HandsetSoft"(钢琴诗人 提供)

    2.04    P241 中间代码中的注释“ // 点菜完闭,通知厨房 ”其中“完闭”应该为"完毕"(钢琴诗人 提供)

    2.05    P62 本页三段代码第一句中 "GiveGift"由于是接口,所以都改为"IGiveGift" (cqchi 提供)

    2.06    P272  最下方代码开始处 在“//网站工厂”上面增加“using System.Collections; ”,以避免由于应用了Hashtable而使得初学者编译时不能通过。(钢琴诗人 提供)

    2.07    P285 中间代码第14行,即else语句里第3行“doubleplayValue”应注意当中有一个空格,即应该是“double playValue” 。 (钢琴诗人 提供)

    2.08    P286 中间文字“音符类(TerminalExpression)”,其中“音符类”应该为“音阶类”(钢琴诗人 提供)

    2.09    P295 中间,“结果显示”里的内容,“男人成功时”、“男人失败时”和“男人恋爱时”中“男人”改为“Man”,“女人成功时”、“女人失败时”和“女人恋爱时”中“女人”改为“Woman”

    2.10    P146 第7行与第8行之间,即“……此时如何办呢?”与“啊,我觉得那要增加好多类……”之间增加下方一段代码(钢琴诗人 提供)

 

class Department
{
    
private int _id;
    
public int ID
    
{
        
get return _id; }
        
set { _id = value; }
    }


    
private string _deptName;
    
public string DeptName
    
{
        
get return _deptName; }
        
set { _deptName = value; }
    }

}

    2.11    P340 倒数第三段中间部分,“set访问器没有显示设置参数”,其中“显示”应改为“显式”。(cqchi 提供)
    2.12    P352 中间四段代码,分别是Cat、Dog、Cattle、Sheep四个类中“public override string getShoutSound() ” ,其中“public”应改为"protected" (beach-boy 提供)

以上为三次重印时已修正的错误,以下为重印后发现的错误,特公告如下。

    3.01    p52 上方代码的第四个注释框中:“本类独有的方法,以区别于ConcreteDecoratorB”,其中“ConcreteDecoratorB”应改为“ConcreteDecoratorA”。(p大simba 提供)
    3.02    p164 最下边的注释框里:“设置ConcreteStateA的下一个状态是ConcreteB”,其中“ConcreteStateA”与“ConcreteStateB”应该把A和B互换过来”。(p大simba 提供)
    3.03    P332 倒数第三行 "我对你的敬仰真如涛涛江水",其中“涛涛江水”应改为“滔滔江水”。(zml 提供)
    3.04    P333 第十四行,“工厂工厂,公仔爱你,就像老鼠爱大米。” 其中“公仔”应改为“工仔”。(zml 提供)
    3.05    P37  4.4节下的第一段第五行, “招聘大学生的公司的咨讯",其中“咨讯”应改为“资讯”。(cqchi 提供) 
    3.06    前言中P15倒数第8行, "Erich Gamm",其中"Gamm"应该是"Gamma"(在P367,附录B的第一行有同样的错误). (Kappa 提供)

    3.07    P12与P68两页上面简单工厂模式的图,简单工厂类和运算类之间的关系应该是依赖(Dependency)而非关联(Association),即简单工厂类与运算类的连线是虚线箭头,而非实线箭头。(Steven Chen 和 hit_gsy 提供)

    3.08    p349 左上方那个说明框 “增加了override表示方法重写”指向上应该再向下一些,指向“override”才正确。

    3.09    P150 倒数第五行,“ProductB1是AccessUser”,其中“AccessUser”应改为“SqlserverDepartment”。( 欧尔 提供
    3.10    前言中P13 最后一行,“表示此名摘自”,其中“此名”应为“此句” (cqchi 提供)

    3.11    前言中p11倒数第六行“《Java与模式》(作者:阎宏”,其中在“阎宏”后应该加一个“)” (cqchi 提供)

    3.12    P11最后一行,“我们来看看这几个类的结构图。”与上文脱节。应该改为“好了,最后,我们来看看这几个类的结构图。”(cqchi 提供)

    3.13    P13第二段第二行,“接口还有另一种表示方法,俗称棒棒糖表示法,就是唐老鸭类实现了‘讲人话’的接口。”,其中“就是唐老鸭类实现了‘讲人话’的接口”改为“比如图中的唐老鸭类就是实现了‘讲人话’的接口”(cqchi 提供)

    3.14    p189 倒数第二行“你是意思是”应为“你的意思是”。(cqchi 提供)

    3.15    P313 倒数第三段“希望您能通过浏览器给她们投票,IE用户,请发送OO加选手编号到http://www.ootv.com/,Firefox用户请发送OO加选手编号到http://www.ootv.net/,其他浏览器用户请发送OO加选手编号到http://www.ootv.org/。”,其中将“通过浏览器”修改为“通过手机”,将“IE用户”修改为“移动用户”,将“Firefox用户”修改为“联通用户”,将“其它浏览器用户”修改为“其它手机用户”。这样的修改和后面的很多地方就都不会有矛盾之处了。(cqchi 提供)

    3.16    p313 倒数第四行,“进级决赛”改为“晋级决赛”。(cqchi 提供)

    3.17    p103 第六段,“买一只好的股票放在那里所谓的‘悟股’”,其中“悟股”应为“捂股” (cqchi 提供)

    3.18    P360 第四段,第四行,“HelloWorld是字符型”,其中“字符型”应为“字符串型”(cqchi 提供)

    3.19    P360 第四段,第五行,“还有就是ArrayList对于存放值类型的数据,比如int型、string型或者结构struct的数据”,其中在"string型"和“或者结构”之间增加“(string是一种拥有值类型特点的特殊引用类型)”说明。(cqchi 提供)

    3.20    P132,倒数第2行 “将有关状态存入具体现察对象” 其中“现”字应为“观”字。(薄雾轻寒 提供)

    3.21    P147   最后一行的“定义一个创建访问User表对象的抽象的工厂接口”,其中“User”应该是“Department”(langya918 提供)

    3.22    P148   第2个提示框中的"SplserverDepartment工厂",其中“Splserver”应该是“Sqlserver"(langya918 提供)

    3.23    P148   第3个提示框中的"OleDBDepartment" 应该是"AccessDepartment" (langya918 提供)

    3.24    P317   中间UML图的标题中,“12号选手 代理(ptoxy)”,其中“ptoxy”应改为“proxy”

    以上为六次重印时已修正的错误。
  
     若读者您还发现什么错误,请在此回复或给我留言,我将及时公布。在此先说一声谢谢。

posted on 2007-12-13 19:48 伍迷 阅读(2961) 评论(114)  编辑 收藏 网摘 所属分类: 大话设计模式

评论

#101楼   回复  引用    

Strong看的好快,也是前辈级别。
我的邮箱是 lkd_2000@126.com
我现在在做一个中等水平的网站模版生成引擎,现在被结构困扰住了,希望得到你大家的帮助。希望楼主可以给我发一份邮件,我可以更好的向您请教问题。

#102楼   回复  引用    

在装饰模式里的面的代码:
我在b/s里运行
public virtual void Show()
{
System.Web.HttpContext.Current.Response.Write("装扮的{0}", name);
}
Show()没有传参
如何出现的name???编译是无法通过的!

这处是不是错误???
2008-01-04 11:43 | errr[未注册用户]

#103楼[楼主]   回复  引用  查看    

@errr
不是错误,在这段代码的前面有
private string name;
public Person(string name)
{
this.name = name;
}

也就是说,这个类是需要在初始化时,即
Person xc = new Person("小菜");
时就给name赋值了,所以你需要再仔细阅读,或者下载书的源代码研究。

2008-01-04 12:01 | 伍迷      

#104楼   回复  引用    

我已经下载你的代码了
因为我对winfrom不熟悉
所以简单改了一下就在asp.net下运行代码

在编译的时候出现

错误 1 “Write”方法没有采用“2”个参数的重载

public virtual void Show()
{
System.Web.HttpContext.Current.Response.Write("装扮的{0}", name);
}
也就是Person类里的这句话
System.Web.HttpContext.Current.Response.Write("装扮的{0}", name);

当我把("装扮的{0}", name); 换成("装扮的小菜");

即可编译通过并且显示了结果!

2008-01-04 12:22 | errr[未注册用户]

#105楼[楼主]   回复  引用  查看    

@errr
书中代码没有错,是你改写时忽略了构造方法和在aspx.cs里没有给构造方法加name参数值引起的问题。
2008-01-04 13:25 | 伍迷      

#106楼   回复  引用    

实践是检验真理的唯一标准
楼主如果有时间可以把你的代码转换在asp.net里运行一次试试。
我并不是认为代码一定是错的!只是我向你反馈一下我遇到的问题。(这个问题先搁置)

还有一个地方我不大明白

pqx.Decorate(xc);
kk.Decorate(pqx);
dtx.Decorate(kk);
dtx.Show();
最后得到结果

第一种装扮:大T恤 垮裤 破球鞋 装扮的小菜

dtx.Show();

每一次装饰都

System.Web.HttpContext.Current.Response.Write("大T恤 ");
base.Show();

System.Web.HttpContext.Current.Response.Write("垮裤 ");
base.Show();

System.Web.HttpContext.Current.Response.Write("破球鞋 ");
base.Show();

每一次都应该调用了 base.Show();为什么出现了Response.Write("大T恤 ");Response.Write("垮裤 ");
Response.Write("破球鞋 ");
而base.Show();装扮的小菜 只是最后一次出现了???
希望楼主可以给我讲一下!
谢谢
2008-01-04 13:38 | errr[未注册用户]

#107楼[楼主]   回复  引用  查看    

@errr
建议你先不要考虑改我的代码为asp.net,因为控制台和asp.net尽管都可以展现结果,但这两者还是有细微的差异的。只有在你已经对一个模式很清楚之后,再考虑改造会更好。比如
System.Web.HttpContext.Current.Response.Write()方法和我代码中用的Console.WriteLine()是完全不同的两个方法,你的直接照搬就不可取,代码应该改为System.Web.HttpContext.Current.Response.Write(("装扮的"+name)。

还有就是你在提问前最好说一下,是哪一章哪一节,或者哪一页,哪一段代码,哪一个例子在提问,因为就装饰模式就有4个样例代码,我也不知你问哪一个。

设计模式开始学习会有很多困惑是很正常的,慢慢来,不要急。自己多花点时间也是值得的。

就你刚才的问题而言,我猜测是你还没有看懂装饰模式的本质,也就是说,你需要在装饰模式这一章,从头读起,一个一个例子的消化,才能理解,为什么多个base.show,却只出现一次。
2008-01-04 14:10 | 伍迷      

#108楼   回复  引用    

正在看<大话>,确是一本好书,也是看到代理模式这发现错误,特意上来查看,发现作者早已更正,谢谢作者!

#109楼   回复  引用    

P220
原文:“大鸟,棒着个手机,玩什么呢?"
改为:“大鸟,捧着个手机,玩什么呢?”

2008-01-23 17:05 | cqchi[未注册用户]

#110楼[楼主]   回复  引用  查看    

@cqchi
感谢您的回复,的确是一个错别字,我已经更新勘误。
2008-01-23 23:16 | 伍迷      

#111楼   回复  引用    

P347 5行"简单理解就是耦断丝连"
更改为:"简单理解就是藕断丝连"

程杰兄,别嫌我吹毛求疵,在下编辑出身,实在看不得错字。
2008-01-24 10:02 | cqchi[未注册用户]

#112楼   回复  引用  查看    

P84
9.5节的第一行靠后的位置:
“你现在‘简历’对象里的数据都是string类型的,也就是值类型....”
在C#中string类型是引用类型,不是值类型。我理解作者要表达的意思,但string在C#中虽然行为酷似值类型,但它确是引用类型。
2008-01-24 21:00 | 心界使者      

#113楼[楼主]   回复  引用  查看    

@cqchi
@心界使者
感谢二位的支持。
2008-01-24 23:30 | 伍迷      

#114楼   回复  引用  查看    

P359
中间那段文字的第三行:
“所以我们可以应用集合的RemoveRt方法...”
呵呵,应该是“RemoveAt”~~

P233
第二行:“哈,小菜说的和GoF说的不就是一会事吗!”
应改成“一回事”~~~
2008-01-25 22:19 | 心界使者      

#115楼[楼主]   回复  引用  查看    

@心界使者
谢谢,已经在勘误中更改。
2008-01-27 11:33 | 伍迷      

#116楼   回复  引用    

@伍迷
P86
客户端调用代码 和 结果显示 不一致,建议在
Resume c = (Resume)a.Clone();下面加上一行
c.SetPersonalInfo("男", "24");

呵呵,这样值类型和引用类型的运行效果就都能显示出来了。
2008-02-02 14:27 | 钢琴诗人[未注册用户]

#117楼   回复  引用    

@伍迷
P146页 对于Department类,由于没有编排上,建议加一句提示(此类同User类类似),便于手头上没有下载源代码的读者轻松阅读。
2008-02-06 11:24 | 钢琴诗人[未注册用户]

#118楼[楼主]   回复  引用  查看    

@钢琴诗人
感谢您的回复,这两条提得都很好。的确如您所写的那样会更加表达清晰。特此修正。
2008-02-06 17:04 | 伍迷      

#119楼   回复  引用    

@伍迷
P159 下边 “疲倦之极”是不是应该为“疲倦至极”呀?
可是查《现代汉语词典》两个都没有找到。

谢谢~
2008-02-13 13:43 | 钢琴诗人[未注册用户]

#120楼[楼主]   回复  引用  查看    

@钢琴诗人
“疲倦之极”应该只是说非常疲倦的意思,这不是成语,当然也就查阅不到。这应该不是错误。
2008-02-13 15:18 | 伍迷      

#121楼   回复  引用    

P49 "你的意思是,应该在内部组装完闭"
应该为"完毕"
2008-02-14 17:55 | cqchi[未注册用户]

#122楼[楼主]   回复  引用  查看    

@cqchi
不得不承认,您是找错别字的高手。或者说,你发现了我的小学语文不咋地的秘密。谢谢!
2008-02-14 20:22 | 伍迷      

#123楼   回复  引用    

哈哈,客气了。我只是希望这本好书能更殝完美
2008-02-15 09:09 | cqchi[未注册用户]

#124楼[楼主]   回复  引用  查看    

@cqchi
第一期印刷的5000册已经卖完,前12条勘误可以在新印刷的书中得到更正,争取13、14、15条勘误可以在二次印刷中得到修正。这样书才可以算相对完美。
2008-02-15 09:31 | 伍迷      

#125楼   回复  引用    

P228
// 手机MP3播放
class HandsetMP3 : HandSoft

应该为
// 手机MP3播放
class HandsetMP3 : HandsetSoft
2008-02-18 22:23 | 钢琴诗人[未注册用户]

#126楼   回复  引用    

@伍迷
P241
中间部分 // 点菜完闭,通知厨房
应该为 // 点菜完毕,通知厨房

呵呵,跟 cqchi 学习的,现学现卖~
2008-02-19 10:12 | 钢琴诗人[未注册用户]

#127楼   回复  引用    

P355中,cj你写道:“接口的命名,前面要加一个大写字母'I',这是规范”
P62 “代理接口如下 interface GiveGift”,是不是应该加一个大写字母I呢?
2008-02-19 14:51 | cqchi[未注册用户]

#128楼[楼主]   回复  引用  查看    

@钢琴诗人
“完闭”这个“闭”错别字实在是让我很烦很郁闷。不过根据我所查找,应该不会再有此错词出现了。

@cqchi
这的确是一个疏忽,没有遵循规范。

再次感谢二位的认真阅读和指正。
2008-02-19 21:18 | 伍迷      

#129楼   回复  引用    

@伍迷
没什么,这本书写的定位以及内容都非常的好,希望通过尽自己一份力使此书变得更完美。

第 38楼 还有一个代码小疏漏。
2008-02-20 10:06 | 钢琴诗人[未注册用户]

#130楼   回复  引用    

@伍迷
P272
网站工厂类代码,由于用到了Hashtable,建议提醒读者在上机实践代码时记得写上命名空间
using System.Collections;

谢谢!
2008-02-21 10:46 | 钢琴诗人[未注册用户]

#131楼   回复  引用    

@伍迷
您好:
P285
中间部分,else语句里“doubleplayValue”应该为“double playValue”
少了一个空格。
谢谢
2008-02-21 17:24 | 钢琴诗人[未注册用户]

#132楼   回复  引用    

P286
中间向下
“音符类(TerminalExpression)”应该为“音阶类(TerminalExpression)”

谢谢
2008-02-21 17:35 | 钢琴诗人[未注册用户]

#133楼[楼主]   回复  引用  查看    

@钢琴诗人
估计等你全部看完,这本书就不会再有任何错误了。

如果能再继续发现三个错误,我就赠送一本新印刷的并有本人签名的《大话设计模式》给你。以表示你对本书的大力支持。

哈哈,给你开个玩笑,哪怕再也发现不了错误,我也已打算赠送一本给你了。等你看完后,给我留言吧。新印刷一出来,我拿到后就给你寄去。

另外,else语句里“doubleplayValue”其实是word的排版太紧给人感觉没有了空格,我是直接粘贴代码上去的,理论上不会出现这种问题,但由于会给读者造成误解,也算是一个小错误。
2008-02-21 20:30 | 伍迷      

#134楼   回复  引用    

嘿嘿,是么,好兴奋哦,低调低调,我是个快毕业的学生,希望能和您电子邮件联系,我的邮箱地址填到上面了。

P295
中间,“结果显示”里的内容,有个小错。

“男人”和“女人”应该分别换成“Man”和“Woman”

我上机实践的代码和您的代码结果显示的都是英文的。
2008-02-21 22:24 | 钢琴诗人[未注册用户]

#135楼   回复  引用    

@伍迷
您好,《大话设计模式》这本书终于读完了,最后面的OOTV大赛总结的真是很好,希望以后还能看到更多的您写的这些方面的书,对于成千上万的初学者,经典著作需要解析,需要您的帮助。
谢谢您,真的好兴奋能获得您亲笔签名的赠书,在此表示感谢,谢谢您的帮助。

我的地址写到留言本里了。
再次的感谢您,谢谢!
2008-02-22 14:36 | 钢琴诗人[未注册用户]

#136楼[楼主]   回复  引用  查看    

@钢琴诗人
我也得多放谢你对本书错误的一一指正,这也是为所有的读者服务的体现,并对你这种认真的学习态度和良好的学习方法给予充分的肯定。

送书是一定会送,但需要等待一段时间。
2008-02-22 15:42 | 伍迷      

#137楼   回复  引用    

@伍迷
嗯,好的,再次谢谢您的肯定。
2008-02-22 20:35 | 钢琴诗人[未注册用户]

#138楼   回复  引用    

买了一本,写得着实不错,配书源码在这里没找到啊,到清华的网站,死活打不开...
:(
2008-02-25 09:49 | _BiLL[未注册用户]

#139楼[楼主]   回复  引用  查看    

@_BiLL
http://www.cnblogs.com/cj723/archive/2007/12/30/1021314.html" target="_new">http://www.cnblogs.com/cj723/archive/2007/12/30/1021314.html
文中有源代码下载地址。
2008-02-25 10:17 | 伍迷      

#140楼   回复  引用    

@_BiLL
《大话设计模式》第9页有下载地址。
http://www.cnblogs.com/Files/cj723/BigTalkDesignPattenSourceCode.rar
2008-02-25 10:20 | 钢琴诗人[未注册用户]

#141楼   回复  引用    

@伍迷
呵呵!
2008-02-25 10:21 | 钢琴诗人[未注册用户]

#142楼   回复  引用    

请问伍先生,我今天刚买了一本,是第一次印刷的,您在书上说的源代码下载地址我怎么打不开呀,清华出版社的下载地址也找不到,我如何才能获取书中的源程序呢?没有的话就没什么意思了。郁闷。
2008-03-02 22:43 | 快乐男孩[未注册用户]

#143楼   回复  引用    

P340
“set访问器没有显示设置参数”,应是“显式”。
2008-03-03 10:59 | cqchi[未注册用户]

#144楼   回复  引用    

P352
protected virtual string getShoutSound()
{
return "";
}
不能运行通过..
出错信息为
"WindowsApplication1.Cat.getShoutSound()" : 当重写"protected"继承成员"WindowsApplication1.Animal.getShoutSound()"时,无法更改访问修饰符.
改为
public virtual string getShoutSound()
{
return "";
}
2008-03-07 17:49 | beach-boy [未注册用户]

#145楼[楼主]   回复  引用  查看    

@beach-boy
@cqchi
感谢两位的认真查看,这两处的确是错误。我已经更新勘误。
2008-03-08 09:50 | 伍迷      

#146楼   回复  引用  查看    

@errr
装饰模式等于是先把组件都入栈了,然后输出时出栈。所以会出现倒序的情况
2008-03-09 09:36 | spgoal      

#147楼   回复  引用    

@伍迷
呵,兴奋ING。今天一起床就收到您的再版新书啦!太激动了,从来没有过的成就感。正如您所说,让我们为写出更优秀的代码而努力。加油!

附图片,我已上传到我的BLOG里了,欢迎您的访问。
http://blog.sina.com.cn/s/blog_47ea6a6f01008w1g.html
2008-03-18 10:49 | 钢琴诗人[未注册用户]

#148楼[楼主]   回复  引用  查看    

@钢琴诗人
不用客气,好好努力吧!
2008-03-18 11:54 | 伍迷      

#149楼   回复  引用    

p52的第四个注释框中:本类独有的方法,以区别于ConcreteDecoratorB,应该是ConcreteDecoratorA
2008-03-24 15:38 | p大simba[未注册用户]

#150楼[楼主]   回复  引用  查看    

@p大simba
感谢您的仔细阅读,这是一个笔误。
2008-03-26 19:55 | 伍迷      

#151楼   回复  引用    

在joyo上买了一本,今天中午送到的,不错
2008-03-28 16:26 | ggooo[未注册用户]

#152楼   回复  引用    

上面10.有关P295的勘误,真是笑话。P293不是说了吗,“this.GetType().Name是获得当前类的名称,比如这里就是‘男人’”。为什么P295还有这种勘误???
本身写的就不严谨,这里勘误还是这种吊儿郎当的态度,真令人寒心
2008-04-07 16:06 | 贺新亚[未注册用户]

#153楼[楼主]   回复  引用  查看    

@贺新亚
这位先生,先别激动,情况是这样的.

起初我是用中文来写代码的,那么自然有"男人"类和"女人"类,所以用this.GetType().Name得到的自然就是“男人…………”.

而后,所有的代码都改为了英文,也就是说,代码当中的"男人"全部改成了"man",此时执行后的结果就不可能是"男人…………",而应该是“man…………”

希望这样的解释可能让你不再心寒。本书是我用心所作,尽管文风未必很严肃,但态度绝对认真,您的“吊儿郎当”之评价不符事实,我不能接受,敬请收回。
2008-04-07 16:47 | 伍迷      

#154楼   回复  引用    

楼主,我给你建议:
1、你的Bug勘误表不应该有重复的Bug Serial No.。你不妨自顶而下如
1.01 bug1
...
1.10 bug10
2.01 bug11
...
2.02 bug12
2、回到我之前的问题,我是不是可以这么理解:你撰写的《大话》第二版,连代码里的字串都改中文成英文了。
为什么?我倒是觉得没有必要。一个中文字串,我本来觉得很好,可你把“男人”变成“Man”之后,陡增了我的误解,这不,我拿着你的第一版来这里对照勘误,各说各话
这是你的责任,至少,你没有把第二版的背景交代清楚,譬如“男人”变“Man”之类
3、再提一个勘误的bug,如下
P146 第7行与第8行之间,即“……此时如何办呢?”与“啊,我觉得那要增加好多类……”之间增加下方一段代码(钢琴诗人 提供) ...
我觉得这里增加的代码真是鸡肋。你回头想想为什么会让读者有这个感觉吧。我希望,这种似是而非的勘误不会出现在你的第三版上
2008-04-07 19:15 | 贺新亚[未注册用户]

#155楼   回复  引用    

我得说清楚,我看好这本书,也推荐朋友买来读,毕竟,现实上很多一知半解的人翻译糟蹋了很多外文书籍,让本来就颇具理论性的书看起来有如天文。他们都懒得自己组织文字撰写了,又或者没有这个能力。你的书具有通俗易懂的优点。
国内人原创写的计算机图书,我少见过好的。我能看出他有些许水平,但是章回段落的组织能力实在差劲,很多地方明显是凑字数乱抄,自己没有想清楚就敢晾出来,亏待了认真两字,真是让人陡增无名之火
说你吊儿郎当确实不恰当,但是,我认真的跟你说,我从google搜索“大话设计模式 勘误”到了这里,看到的确实不是一个很认真的勘误网页。
2008-04-07 19:38 | 贺新亚[未注册用户]

#156楼[楼主]   回复  引用  查看    

@贺新亚
感谢您给我的第一条建议,我已经更正了勘误的编号,这的确是一个好主意.

第二个问题,您的理解其实不对,把代码中的中文改成英文,是在图书正式出版之前就完成的,当时和编辑还商量过,哪一种方式更合理,尽管中文代码容易阅读,但却非常不规范(现实中一般不用中文写代码).因此最终12月份出版时,我已经是将所有的代码都改成英文的.(您可查看编辑写的序,当中有提到)

至于您提到的将"男人"改成"man",仅仅只是一个字符串的变化.是因为那段代码执行后不会出现"男人成功时”、“男人失败时”和“男人恋爱时”的字样,而只会出现"man成功时”、“man失败时”和“man恋爱时”因此这算是第一二次印刷时的小bug(一直存在的bug),在勘误中声明,并在第三次印刷时更正.您可以按照代码输入执行后就知.

至于第三个问题,您可查看本文第30楼
#30楼 218.11.51.*
@伍迷
P146页 对于Department类,由于没有编排上,建议加一句提示(此类同User类类似),便于手头上没有下载源代码的读者轻松阅读。

增加它的目的是为了给没有下载源代码的读者轻松阅读.而只写"此类同User类类似"并不严谨,它们之间有属性不相同的地方,初学者很难从书中完全将代码复原,因此增加这段代码很有必要。

希望我的这些解释可以令您满意。也感谢您的指正。
2008-04-08 09:48 | 伍迷      

#157楼   回复  引用    

书中对于里侍代换代换原则(/P41)的讲解中所举的鸟例子,是不恰当的,或者说是偷换概念的讲解。
生搬硬设的例举不会有任何说服力,而且一定会产生不好的影响和效果!!
我们都知道“企鹅是一种鸟”,这不止是在生物科学上的周知常识!
不错,“企鹅不是一种“能飞的鸟””,可这个需要作者曲径通幽的告诉我们吗?
事实上的结果是:书中的这种文字描述和例举,对于本来就有概念的人而言,心领神会似是而非;对于那些本来就没有概念的“新人”而言,毫无意义,更陡增困惑!
2008-04-10 10:26 | 贺新亚[未注册用户]

#158楼[楼主]   回复  引用  查看    

@贺新亚
对于你的这种评价,尽管仁者见仁,智者见智,我想还是有必要解释一下。我承认,书中由于大量的生活实例,可能会有小部分例子并不是很准确。但这是建立在不影响读者对技术的理解为前提之下的。另外,除了数学意义的表述,绝大部分对技术的解释,特别所做的类比都会存在一定的偏差。而数学意义的表述准确有之,理解非常困难。类比可能不准确,却反而能起到加深理解的目的,因此我不认为这是什么根本的问题。

本书风格就是用大量生活实例来讲解技术难点。企鹅是一种鸟,因此企鹅类可以继承鸟类,而飞翔并不是所有的鸟都必需的能力,比如企鹅或鸵鸟就不行,这样很形象的表述就是本书的风格,这些常识也不会给读者产生什么歧义。甚至说,我是很刻意的要让文字里充满了大家都知道的常识,目的是让人感觉很容易理解。

您如果不喜欢,只能说,本书没有让您满意,我很抱歉。也或许,您更喜欢非常正规的讲解技术,我建议您直接阅读GoF《设计模式》,里面应该没有任何歧义,可能会让您满意。
2008-04-10 11:05 | 伍迷      

#159楼   回复  引用    

"企鹅是一种鸟,因此企鹅类可以继承鸟类,而飞翔并不是所有的鸟都必需的能力,比如企鹅或鸵鸟就不行",这是对的。
可p41里所举的例子,真的不恰当。有恰当的例子,而且可以写的一样甚至更生动。
2008-04-10 11:44 | 贺新亚[未注册用户]

#160楼   回复  引用    

吹毛求龇,我的言辞显得如此
不好意思,我学数学的,对概念力求精确,不存歧义
很多的科学发现都是从对基础概念的怀疑而得到的,譬如爱恩斯坦对时间和距离的思考:)
扯远了,实话说,我不是一个聪明的人,常受一些似是而非的理论而困惑;我现在读书看字几近咬文嚼字,有意识的,从泥潭里爬出来看那些在泥潭里挣扎的人,愤愤不平
对于某个理论,光看一本书是不大可能有很好的理解的,就算这本书的论述有多严谨。所谓兼听则明,何况,每个人的知识背景千差万别。
现在我们终于知道做老师的高度和责任
2008-04-10 12:56 | 贺新亚[未注册用户]

#161楼   回复  引用    

GoF的《设计模式》我看过的,我是对照中英文一起看;书是很严谨,可翻译还真的一如既往不求甚解。那些应该加粗整体看待的概念,中文表达得朝三暮四,让人不知所措
2008-04-10 13:05 | 贺新亚[未注册用户]

#162楼[楼主]   回复  引用  查看    

@贺新亚
在本书41页,大鸟提了一个问题,他说,“如果鸟是可以飞的,企鹅不会飞,那是企鹅是鸟吗?企鹅可以继承鸟这个类吗?”这里面,大鸟其实是在挖了一个坑,故意让小菜去跳的,常识都知道企鹅是鸟,所以小菜就说:“企鹅类可以继承鸟类”。

而大鸟后面就说到“尽管在生物学分类上,企鹅是一种鸟,但在编程世界里,企鹅不能以父类——鸟的身份出现,因为前提说,所有鸟都能飞,而企鹅飞不了,所以企鹅不能继承鸟类。”

首先这本书在这里是以一种对话形式讲解的,在日常对话中,说个常识问题故意让人上当的情形其实很多。我之所以这样写,其实也是想加深读者对里氏代换原则的理解,也就是要满足这个原则是有前提的,即:“一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,…………”

你的回复后,我认真再看了书中的这段文字,我认为这个例子在这里是很合适的。因此对你的看法我有保留意见,但没有令你满意,我很抱歉。
2008-04-10 20:06 | 伍迷      

#163楼   回复  引用    

p164最下边的注释框里的:“设置ConcreteStateA的下一个状态是ConcreteB”应该把A和B互换过来。
2008-04-28 09:46 | p大simba[未注册用户]

#164楼   回复  引用    

诚然,出一本完美无缺的书是很难的。作者能做到这样已经很可贵了。
2008-04-28 09:53 | p大simba[未注册用户]

#165楼   回复  引用    

第一版P332倒数第三行 应为:滔滔江水
P333 公仔爱你,就像老鼠爱大米,公仔应改为工仔
2008-05-05 19:21 | zml[未注册用户]

#166楼[楼主]   回复  引用  查看    

@p大simba
@zml
感谢两位的发现,很低级的错误,谢谢指正。
2008-05-05 20:59 | 伍迷      

#167楼   回复  引用    

P37 “招聘大学生的公司的咨讯",应为"资讯"
2008-05-09 13:34 | cqchi[未注册用户]

#168楼[楼主]   回复  引用  查看    

@cqchi
感谢您的指正,我还专门去查证了这两个词的区别,的确,资讯的意思是资料讯息的意思,而没有咨讯这个词,只有咨询,那是征求意见 (多指行政当局向顾问之类的人员或特设的机关征求意见)。如心理咨询、业务咨询等。
2008-05-11 10:05 | 伍迷      

#169楼   回复  引用  查看    

今天到货,看了再说:)
2008-05-15 10:07 | 泛舟      

#170楼   回复  引用    

P15倒数第8行, Erich Gamm应该是Gamma.
2008-06-04 12:55 | Kappa[未注册用户]

#171楼   回复  引用  查看    

--引用--------------------------------------------------
p大simba: p52的第四个注释框中:本类独有的方法,以区别于ConcreteDecoratorB,应该是ConcreteDecoratorA
--------------------------------------------------------
这里为什么是ConcreteDecoratorA呢

--引用--------------------------------------------------
Kappa: P15倒数第8行, Erich Gamm应该是Gamma.
--------------------------------------------------------
P15没有你说的这个错误啊。
我的是第三次印刷的
2008-06-23 16:19 | RainSky      

#172楼[楼主]   回复  引用  查看    

@RainSky
Kappa: P15倒数第8行, Erich Gamm应该是Gamma.

指的是前言中的第15页
2008-06-23 17:08 | 伍迷      

#173楼   回复  引用  查看    

p349
左上方那个说明框 增加了override表示方法重写,是不是应该向下一点,知道override上边呢。
2008-06-24 10:37 | AgpSky      

#174楼   回复  引用  查看    

伍迷老师。在装饰模式里面,第三版的时候能不能解释一下为什么会使用的base,和使用base以后的作用呢。
我例如断点看出来执行过程了。但是还理解不透彻,希望指点一下。
也许我对base理解的不好吧。见谅。
2008-06-27 16:55 | AgpSky      

#175楼[楼主]   回复  引用  查看    

@AgpSky
左上方那个说明框 “增加了override表示方法重写”,应该向下一点。感谢指正。


这其实是装饰模式的关键所在。你不妨自己输入一遍代码,然后再思考。如果一遍不行,那就两遍,最好达到可以默写的地步。每一次的编写代码,你都会更进一步思考它的。相信用不了几次,你就能完全理解它的精髓的。

我并不是不可以向你解释,但是设计模式的确是思维的体操,自己的钻研思考要远远比我告诉你结果好得多。希望你能理解我的意思。
2008-06-29 22:39 | 伍迷      

#176楼   回复  引用  查看    

关于抽象工厂模式这一章
P150:
图下面第一段文字最后一句话:“比如ProductA1可以理解是SqlserverUser,而ProductB1是AccessUser”;
这里为什么ProductB1是AccessUser呢?如果没有理解错的话此处ProductB1应该是实现IDepartment接口,所以是不是应该是SqlserverDepartment!还是我理解有问题!
2008-06-30 13:13 | 欧尔      

#177楼   回复  引用    

2.03和2.06是一样的
2008-07-21 11:34 | BJL[未注册用户]

#178楼[楼主]   回复  引用  查看    

@BJL
谢谢指正,这实在是是勘误里的错误呀.
2008-07-21 12:55 | 伍迷      

#179楼   回复  引用    

对于“3.07”,在P68的图应该做相应的更改,因为它们是同一个图.
但前提是“3.07”所陈述的内容是正确的
它正确吗?我也不知道,所以请顺带解释一下
2008-07-23 17:01 | hit_gsy[未注册用户]

#180楼[楼主]   回复  引用  查看    

@欧尔
您说得没错,这里是有点问题,应该是"ProductB1是SqlserverDepartment".感谢您的指正。


@hit_gsy
P68的确是同样图的错误。
我简单解释一下,简单工厂类并没有运算类的字段,而仅仅是createOperation这个方法返回一个Operation的对象,一般来说,关联关系在C#中作为类的字段来表示,而依赖关系则是函数的参数或者是返回值来表示。所以此处应该是依赖而不是关联。
2008-07-23 21:49 | 伍迷      

#181楼   回复  引用    

再来挑几个错字:
前言
P9 最后一行“表示此名摘自”应为“表示此句摘自”
p11倒数第六行“《Java与模式》(作者:阎宏”应为“《Java与模式》(作者:阎宏)”
正文
p11 引入UML类图的对话太过牵强
“如果要修改界面呢?”
“那就去修改界面呀,关运算什么事呀。”
后面就是UML图的介绍,读者就不明白这两句话到底有什么用!
P13“接口还有另一种表示方法,俗称棒棒糖表示法,就是唐老鸭类实现了“讲人话”的接口”
这句更是突兀,因为前面从没提到唐老鸭类。
p189 倒数第二行“你是意思是”应为“你的意思是”
或许吹毛求疵了点,但我觉得一本书应该严谨,虽然以大话方式来写!


2008-07-29 17:00 | cqchi[未注册用户]

#182楼   回复  引用    

还有话要说,不吐不快。
最后一章以超级模式大赛的形式来总结各个模式的差别,感觉很新颖。但是前后有些矛盾。
P313写明“希望您能通过浏览器投票”
P330又写明“我们的短信平台刚刚关闭”。

2008-07-29 17:36 | cqchi[未注册用户]

#183楼[楼主]   回复  引用  查看    

@cqchi
非常感谢您的指正,没想到还能找到如此多的错误,虽然大都不影响阅读,但是错误毕竟是错误,还是应该改正的。谢谢支持!等下次印刷(估计是第五次印刷)出来,我将赠送您一本,以对本书指出如此多的错误的感谢!请您记着把联系方法发Mail给我。
2008-07-29 22:20 | 伍迷      

#184楼   回复  引用    

:-)请记得签名!感谢!
2008-07-30 09:21 | cqchi[未注册用户]

#185楼   回复  引用    

p313 “进级决赛”应为“晋级决赛”
2008-07-30 09:36 | cqchi[未注册用户]

#186楼   回复  引用  查看    

P22
2.4策略模式上面那段:
就是大鸟接着说:""。这里大鸟的意思是小菜需要想一个办法可以解决面对算法的时常变动,应该有更好的办法。但是在后面讲过策略模式以后,并没有解决这个问题。因为策略模式和简单工厂结合以后当算法变动的时候还是需要编译的。所以这里的写法上是不是有些问题。虽然在最后讲到了应用反射,但是开始给读者的感觉就是下面出场的模式就是解决这个问题的,却没有解决了。而p28 2.7上面的小结那里给读者的感觉就是应用策略模式以后耦合度降低了。
请伍迷老师讲解一下。谢谢
不知道是我的理解问题,还是疏忽了。
2008-07-30 16:38 | AGPSky      

#187楼[楼主]   回复  引用  查看    

@AGPSky
建议你去阅读“抽象工厂模式”中的讲解反射的一段,应该就可以明白如何将耦合度进一步降低了。
2008-08-01 09:18 | 伍迷      

#188楼   回复  引用  查看    

--引用--------------------------------------------------
伍迷: @AGPSky
建议你去阅读“抽象工厂模式”中的讲解反射的一段,应该就可以明白如何将耦合度进一步降低了。
--------------------------------------------------------
那里我看了,我的意思是:在引入策略模式前面的讲解让读者以为策略模式就可以完全解决问题了(这里引入的时候是不是有点问题)。其实并没有,还需要应用到反射。
2008-08-01 13:19 | AGPSky      

#189楼   回复  引用  查看    

正在看这本书,写的真的很好。很适合入门,看一个模式再对应看WEBCAST一讲。书写的真不错。
-----------------------------
P56页最后一个字是“强”还是“弓虽”?~~
-----------------------------
2008-08-10 08:15 | Astar      

#190楼   回复  引用    

p103 “买一只好的股票放在那里所谓的‘悟股’”应为“捂股”
2008-08-12 10:20 | cqchi[未注册用户]

#191楼[楼主]   回复  引用  查看    

@AGPSky
你讲的有些道理,不过这并不是错误,而是缺陷(它并不太影响阅读),要改就得大动作,本次版本就不做改动了。感谢您的提醒。

@Astar
P56页最后一个字是“弓虽”。是故意这样的。

@cqchi
p103 “的确应该是“捂股”,谢谢。
2008-08-13 20:38 | 伍迷      

#192楼   回复  引用    

再来两个
P360 “HelloWorld是字符型”应为“字符串型”
“还有就是ArrayList对于存放值类型的数据,比如int型、string型”,string实际上不是值类型。
p362 "委托是对函数的封装,可以当作给方法的特征指定一个名称。而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程。"
应为“事件对象通知处理过程”。
2008-08-28 09:38 | cqchi[未注册用户]

#193楼   回复  引用    

P260,
if(colleague==colleague1)
{
colleague2.Notify(message);//colleague1.Notify(message);??
}
else
{
colleague1.Notify(message);??colleague2.Notify(message)??

}
2008-08-30 09:56 | AstarNoLogin[未注册用户]

#194楼[楼主]   回复  引用  查看    

@cqchi
P360 “HelloWorld是字符型”应为“字符串型”
“还有就是ArrayList对于存放值类型的数据,比如int型、string型”,string实际上不是值类型。

的确是问题,已经修正

p362 "委托是对函数的封装,可以当作给方法的特征指定一个名称。而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程。"

这一句没有问题,就应该是"事件对象处理通知过程"
2008-09-18 20:58 | 伍迷      

#195楼[楼主]   回复  引用  查看    

@AstarNoLogin
这一段代码没有问题,就应该是这样的。
2008-09-18 20:59 | 伍迷      

#196楼   回复  引用    

p25的代码结构图中,CashContex和CashSuper之间是聚合关系,而代码实现上是关联关系,是我理解错误?
2008-09-28 18:30 | eeee[未注册用户]

#197楼   回复  引用    

非常棒的书!发现错字。第4次印刷版,第132页,倒数第6行 “将有关状态存入具体现察对象” 其中“现”字应为“观”字!
2008-12-24 08:56 | 薄雾轻寒[未注册用户]

#198楼[楼主]   回复  引用  查看    

@薄雾轻寒
没想到,这么久了,你还能查到错误字,非常感谢!
2008-12-24 21:19 | 伍迷      

#199楼   回复  引用    

P3页修改后的计算器的代码,对string类型使用switch应该是错误的
2009-01-06 12:15 | 郭帆[未注册用户]

#200楼[楼主]   回复  引用  查看    

@郭帆
不知你是否是用C#,我这里用的C#对string使用switch是可以的.
2009-01-06 16:19 | 伍迷      

#201楼   回复  引用    

伍迷:
你寄来的书已收到,感谢!!让我们一起为写出优秀的代码努力!!!
2009-01-08 10:52 | cqchi[未注册用户]
评论共2页: 上一页 1 2 



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 994047




相关文章:

相关链接: