《大话设计模式》勘误
尽管已经很仔细的检查和审核,但错误还是没有能避免。在此向已经购买了本书的读者诚意地说声抱歉。现勘误如下:
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行之间,即“……此时如何办呢?”与“啊,我觉得那要增加好多类……”之间增加下方一段代码(钢琴诗人 提供)
{
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”
以上为六次重印时已修正的错误。
4.01 P75 中代码
IFactory factory = new UndergraduteFactory(); //要改变为社区志愿者,只需改变此处
LeiFeng student = factory.CreateLeiFeng();
student.BuyRice();
student.Sweep();
student.Wash();
修改为
IFactory factory = new UndergraduteFactory(); //要改变为社区志愿者,只需改变此处
LeiFeng studentA = factory.CreateLeiFeng();
studentA.BuyRice();
LeiFeng studentB = factory.CreateLeiFeng();
studentB.Sweep();
LeiFeng studentC = factory.CreateLeiFeng();
studentC.Wash();
修改原因是因为这工厂方法模式的实现代码要和简单工厂模式的代码做对比,有读者提出,原有的写法让人不是很容易理解,本人仔细分析觉得读者讲得有道理,在此修改完善。
4.02 P35 第四行最后,“The Open-Closeed”中 "Closeed"应改为“Closed” (顾行星 提供)
4.03 P16 代码第二行 public Metabolism (Oxygen oxygen,Water water),当中少了一个void,应该是public void Metabolism (Oxygen oxygen,Water water) (Shikiro 提供)
4.04 P186 代码第一行 “class 游戏角色” ,当中“游戏角色”应该改为“GameRole”(秦萌 提供)
4.05 P288 下方代码第二行 “context.演奏文本” ,当中“演奏文本”应该改为“PlayText”(秦萌 提供)
4.06 P206,IEumerator应该是IEnumerator (LSGO_MaYanPeng 提供)
4.07 P202 MartinFlower应该是Martin Fowler (LSGO_MaYanPeng 提供)
若读者您还发现什么错误,请在此回复或给我留言,我将及时公布。在此先说一声谢谢。