描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302615538
《大话设计模式【Java溢彩加强版】》延续了前作轻松调侃的风格,采用了师生对话的方式展开讨论,其中穿插了大量“接地气”的类比案例,帮助大家迅速“开窍”,作者精心将本书图表制作成彩色三维形式,阅读起来你会发现,不仅仅是养眼,对一些流程、概念的解说,用彩色三维图表更为精准,学习体验有了质变。
《大话设计模式 Java溢彩加强版》是百万销量的经典畅销书《大话设计模式》的全新升级版,描述语言由上一版C#变为Java。
《大话设计模式 Java溢彩加强版》在形式上开创了IT技术图书的先河。通篇以情景对话形式,用多个小故事和编程示例来组织解读GoF(设计模式经典名著—Design Patterns Elements of Reusable Object-Oriented Software)的23个设计模式。
《大话设计模式 Java溢彩加强版》共分为一个楔子 29章正文。其中,楔子主要通过一个编程实例的演变为初学者介绍了面向对象的基本概念,用来奠定面向对象基础以及树立正确的、有高度的开发思维;第0、1、3、4、5章着重讲解了面向对象的意义、好处以及几个重要的设计规则;第2章,以及第6~28章详细讲解了23种设计模式;第29章对设计模式进行了全面总结。
《大话设计模式 Java溢彩加强版》的特色是通过小菜与大鸟的趣味问答,在讲解程序的不断重构和演讲过程中,极大地降低设计模式的学习门槛,让初学者可以更加容易地理解为什么这样设计才是好的?是怎样想到这样设计的?以达到不但授之以“鱼”,还授之以“渔”的目的,引导读者体会设计演变过程中蕴藏的大智慧。
第0章 楔子 培训实习生—面向对象基础 1
0.1 培训实习生 1
0.2 类与实例 2
0.3 构造方法 4
0.4 方法重载 6
0.5 属性与修饰符 7
0.6 封装 9
0.7 继承 10
0.8 多态 14
0.9 重构 18
0.10 抽象类 20
0.11 接口 22
0.12 集合 27
0.13 泛型 29
0.14 客套 31
第1章 代码无错就是优?—简单工厂模式 32
1.1 面试受挫 32
1.2 初学者代码毛病 33
1.3 代码规范 34
1.4 面向对象编程 34
1.5 活字印刷,面向对象 35
1.6 面向对象的好处 37
1.7 复制 vs. 复用37
1.8 业务的封装 38
1.9 紧耦合 vs. 松耦合40
1.10 简单工厂模式 42
1.11 UML类图 43
第2章 商场促销—策略模式 48
2.1 商场收银软件 48
2.2 增加打折 49
2.3 简单工厂实现 50
2.4 策略模式 53
2.5 策略模式实现 55
2.6 策略与简单工厂结合 57
2.7 策略模式解析 58
第3章 电子阅读器 vs. 手机—单一职责原则 60
3.1 阅读干吗不直接用手机? 60
3.2 手机不纯粹 60
3.3 电子阅读器 vs. 手机61
3.4 单一职责原则 62
3.5 方块游戏的设计 62
3.6 电子阅读器与手机的利弊 65
第4章 考研求职两不误—开放-封闭原则 66
4.1 考研失败 66
4.2 开放-封闭原则 67
4.3 何时应对变化 69
4.4 两手准备,并全力以赴 70
第5章 会修电脑不会修收音机?—依赖倒转原则 72
5.1 MM请求修电脑 72
5.2 电话遥控修电脑 73
5.3 依赖倒转原则 74
5.4 里氏代换原则 77
5.5 修收音机 78
第6章 穿什么有这么重要?—装饰模式 80
6.1 穿什么有这么重要? 80
6.2 小菜扮靓第一版 81
6.3 小菜扮靓第二版 83
6.4 装饰模式 85
6.5 小菜扮靓第三版 88
6.6 商场收银程序再升级 91
6.7 简单工厂 策略 装饰模式实现 92
6.8 装饰模式总结 96
第7章 为别人做嫁衣—代理模式 98
7.1 为别人做嫁衣! 98
7.2 没有代理的代码 100
7.3 只有代理的代码 101
7.4 符合实际的代码 102
7.5 代理模式 104
7.6 代理模式应用 105
7.7 秀才让小六代其求婚 106
第8章 工厂制造细节无须知—工厂方法模式 107
8.1 需要了解工厂制造细节吗? 107
8.2 简单工厂模式实现 108
8.3 工厂方法模式实现 109
8.4 简单工厂 vs. 工厂方法 110
8.5 商场收银程序再再升级 115
8.6 简单工厂 策略 装饰 工厂方法 116
第9章 简历复印—原型模式 120
9.1 夸张的简历 120
9.2 简历代码初步实现 121
9.3 原型模式 123
9.4 简历的原型实现 125
9.5 浅复制与深复制 126
9.6 简历的深复制实现 129
9.7 复制简历 vs. 手写求职信 130
第10章 考题抄错会做也白搭—模板方法模式 132
10.1 选择题不会做,蒙呗! 132
10.2 重复=易错 难改 133
10.3 提炼代码 135
10.4 模板方法模式 138
10.5 模板方法模式的特点 140
10.6 主观题,看你怎么蒙 140
第11章 无熟人难办事?—迪米特法则 141
11.1 第一天上班 141
11.2 无熟人难办事 142
11.3 迪米特法则 144
第12章 牛市股票还会亏钱?—外观模式 145
12.1 牛市股票还会亏钱? 145
12.2 股民炒股代码 146
12.3 投资基金代码 147
12.4 外观模式 149
12.5 何时使用外观模式 150
第13章 好菜每回味不同—建造者模式 152
13.1 炒面没放盐 152
13.2 建造小人一 154
13.3 建造小人二 155
13.4 建造者模式 156
13.5 建造者模式解析 159
13.6 建造者模式基本代码 160
第14章 老板回来,我不知道—观察者模式 162
14.1 老板回来?我不知道! 162
14.2 双向耦合的代码 163
14.3 解耦实践一 165
14.4 解耦实践二 167
14.5 观察者模式 170
14.6 观察者模式的特点 172
14.7 Java内置接口实现 173
14.8 观察者模式的应用 177
14.9 石守吉失手机后 178
第15章 就不能不换DB吗?—抽象工厂模式 179
15.1 就不能不换DB吗? 179
15.2 最基本的数据访问程序 181
15.3 用了工厂方法模式的数据访问 程序 182
15.4 用了抽象工厂模式的数据访问 程序 185
15.5 抽象工厂模式 188
15.6 抽象工厂模式的优点与缺点 189
15.7 用简单工厂来改进抽象工厂 190
15.8 用反射 抽象工厂的数据访问 程序 192
15.9 用反射 配置文件实现数据访问 程序 194
15.10 商场收银程序再再再升级 195
15.11 无痴迷,不成功198
第16章 无尽加班何时休—状态模式 199
16.1 加班,又是加班! 199
16.2 工作状态 — 函数版 200
16.3 工作状态 — 分类版 201
16.4 方法过长是坏味道 203
16.5 状态模式 203
16.6 状态模式的好处与用处 205
16.7 工作状态 — 状态模式版 206
第17章 在NBA我需要翻译—适配器模式 209
17.1 在NBA我需要翻译! 209
17.2 适配器模式 210
17.3 何时使用适配器模式 212
17.4 篮球翻译适配器 213
17.5 适配器模式的.NET应用 216
17.6 扁鹊的医术 217
第18章 如果再回到从前—备忘录模式 218
18.1 如果再给我一次机会…… 218
18.2 游戏存进度 219
18.3 备忘录模式 221
18.4 备忘录模式基本代码 222
18.5 游戏进度备忘 224
第19章 分公司=一部门—组合模式 227
19.1 分公司不就是一部门吗? 227
19.2 组合模式 229
19.3 透明方式与安全方式 231
19.4 何时使用组合模式 232
19.5 公司管理系统 233
19.6 组合模式好处 235
第20章 想走?可以!先买票—迭代器模式 237
20.1 乘车买票,不管你是谁! 237
20.2 迭代器模式 239
20.3 迭代器实现 240
20.4 Java的迭代器实现 243
20.5 迭代高手 244
第21章 有些类也需计划生育—单例模式 245
21.1 类也需要计划生育 245
21.2 判断对象是否是null 246
21.3 生还是不生是自己的责任 249
21.4 单例模式 251
21.5 多线程时的单例 253
21.6 双重锁定 254
21.7 静态初始化 255
第22章 手机软件何时统一—桥接模式 257
22.1 凭什么你的游戏我不能玩 257
22.2 紧耦合的程序演化 258
22.3 合成/聚合复用原则 262
22.4 松耦合的程序 263
22.5 桥接模式 265
22.6 桥接模式基本代码 267
22.7 我要开发“好”游戏 268
第23章 烤羊肉串引来的思考—命令模式 269
23.1 吃烤羊肉串! 269
23.2 烧烤摊 vs. 烧烤店 270
23.3 紧耦合设计 271
23.4 命令模式 272
23.5 松耦合设计 274
23.6 进一步改进命令模式 276
23.7 命令模式的作用 278
第24章 加薪非要老总批?—职责链模式 279
24.1 老板,我要加薪! 279
24.2 加薪代码初步 280
24.3 职责链模式 282
24.4 职责链的好处 284
24.5 加薪代码重构 284
24.6 加薪成功 287
第25章 世界需要和平—中介者模式 289
25.1 世界需要和平! 289
25.2 中介者模式 291
25.3 安理会作中介 293
25.4 中介者模式的优缺点 295
第26章 项目多也别傻做—享元模式 298
26.1 项目多也别傻做! 298
26.2 享元模式 300
26.3 网站共享代码 302
26.4 内部状态与外部状态 304
26.5 享元模式应用 306
第27章 其实你不懂老板的心—解释器模式 309
27.1 其实你不懂老板的心 309
27.2 解释器模式 310
27.3 解释器模式的好处 313
27.4 音乐解释器 313
27.5 音乐解释器实现 315
27.6 料事如神 319
第28章 男人和女人—访问者模式 320
28.1 男人和女人! 320
28.2 最简单的编程实现 321
28.3 简单的面向对象实现 322
28.4 用了模式的实现 324
28.5 访问者模式 327
28.6 访问者模式基本代码 328
28.7 比上不足,比下有余 330
第29章 OOTV杯超级模式大赛—模式总结 331
29.1 演讲任务 331
29.2 报名参赛 332
29.3 超模大赛开幕式 333
29.4 创建型模式比赛 337
29.5 结构型模式比赛 342
29.6 行为型模式一组比赛 350
29.7 行为型模式二组比赛 356
29.8 决赛 361
29.9 梦醒时分 365
29.10 没有结束的结尾 366
参考文献367
大话设计模式 | 【Java溢彩加强版】
本书起因
写这本书源于我的一次做培训的经历,培训对象大多是计算机专业的学生或有一定经验的在职开发者。他们都知道类、方法、构造方法,甚至抽象类、接口等概念,并用Visual Studio写过桌面或Web程序。可是,当我提问为什么要面向对象,它的好处在哪里时,却没有人能完整地讲出来,多数人的反应是,概念是知道的,就是表达不清楚。
针对于此,我举了中国古代四大发明中活字印刷的例子(见第1章),通过一个虚构的曹操做诗的情景,把面向对象的几大好处讲解了一下,学生普遍感觉这样的教学比直接告诉他们面向对象有什么好处要更加容易理解和记忆。
这就使得我不断地思考“学一门技术是否需要趣味性以及通俗性的引导”这样一个问题。
我在思考中发现,看小说时,一般情况下我都可以完整地读完它,而阅读技术方面的图书,却很少按部就班、每章每页地仔细阅读。尽管这两者有很大区别,技术书中可能有不少知识是已经学会或暂时用不上的内容,但也不得不承认,小说之所以可以坚持读完是因为我对它感兴趣,作者的精妙文笔布局在吸引我。而有些技术书的枯燥乏味使得读者阅读很难坚持,很多时候读几章就将其放入书架了。
技术的教学同样如此,除非学生是抱着明确的学习动机来参与其中,否则照本宣科的教学、枯燥乏味的讲解,学生一定会被庞杂的概念和复杂的逻辑搅晕了头脑,致使效果大打折扣。也正因如此,造成部分学生学了四年的计算机编程,却可能连面向对象有什么好处都还说不清。
为什么不可以让技术书带点趣味性呢?哪怕这些趣味性与所讲的技术并不十分贴切,只要不是影响技术核心的本质,不产生重大的错误,让读者能轻松阅读它,并且有了一定的了解和感悟,这要比一本写得高深无比却被长期束之高阁的书好得多。
也正是这个原因,本人开始了关于设计模式的趣味性写作的尝试。
本书读者
显然,本书不是给零编程经验的人看的,对于想入这一行的朋友来说,找一门编程语言,从头开始或许才是正道。而本书也不太适合有多年面向对象开发经验、对常用设计模式了如指掌的人—毕竟这里更多的是讲解基本观念。
我时常拿程序员的成长与足球运动员的成长作对比。
GoF的《设计模式》好比是世界顶级足球射门集锦,而《重构》《敏捷软件开发》《设计模式解析》好比是一场场精彩的足球比赛。虽然我为之疯狂,为之着迷,可是我并不只是想做一个球迷(软件使用者),而是更希望自己能成为一个球员(软件设计师),能够亲自上场比赛,并且最终成为球星(软件架构师)。我仔细地阅读这些被誉为经典的著作,认真实践其中的代码,但是我总是半途而废、坚持不下去,我痛恨自己意志力的薄弱、憎恶自己轻易地放弃,难道我真的就是那么笨?
痛定思痛,我终于发现,贝利、马拉多纳不管老、胖都是用来敬仰的,贝克汉姆、罗纳尔迪尼奥不管美、丑都是用来欣赏的,但他们的球技……客气地说,是不容易学会的,客观地说,是不可能学得会的。为什么会这样?原来,我学习中缺了一个很重要的环节,我们在看到了精彩的球赛、欣赏球星高超球技的同时,却忽略了球星的成长过程。他们尽管有一定天分,但也是从最底层通过努力一点一点慢慢地显露出来的,我们需要的不仅是世界杯上的那定乾坤的一脚,更需要了解这一脚之前是如何练出那种神奇脚法的方法。对于程序员来讲,精彩代码的实现思路,要比看到精彩的代码更加令人期待。
本书显然不是培养球星(软件架构师)的豪门俱乐部,而是训练足球基本功的体校,培训的是初学足球的小球员(面向对象的程序员),本书希望的是读者阅读后可以打好面向对象编程的基础,从而更加容易并深入地理解和感受GoF的《设计模式》以及其他大师作品的魅力。
本书定位
本书是在学习众多大师智慧结晶的图书作品、分享了多位朋友的实践经验的基础上,加之自己的编程感受写出来的。正如牛顿有句名言:“如果说我比别人看得更远些,那是因为我站在了巨人的肩上。”
显然本书并没有创造或发现什么模式,因此谈不上站在巨人肩膀上而看得更远。所以作者更希望本书能成为一些准备攀登面向对象编程高峰的朋友的登山引路人、提携者,在您登山途中迷路时给予指引一条可以坚实踩踏的路线,在您峭壁攀岩不慎跌落时给予保护和鼓励。
本书特色
本书有两个特色。
第一个特色是重视过程。我看了太多的计算机编程类的图书,大多数书籍都是在集中讲授优秀的解决方案或者完美的程序样例,但对这些解决方案和程序的演变过程却重视不够,好书之所以好,就是因为作者可以站在学习者的角度去讲解问题所在,让学大话设计模式 | 【Java溢彩加强版】
习门槛降低。《重构与模式》中有一句经典之语:“如果想成为一名更优秀的软件设计师,了解优秀软件设计的演变过程比学习优秀设计本身更有价值,因为设计的演变过程中蕴藏着大智慧。”本人就希望能通过小菜与大鸟的对话,在不断地提问与回答过程中,在程序的不断重构演变中,把设计模式的学习门槛降低,让初学者可以更加容易地理解,为什么这样设计才好,你是如何想到这样设计的。
第二个特色就是贴近生活。尽管编程是严谨的,不容大话和戏说,但生活却是多姿多彩的,而设计模式也不是完全孤立于现实世界而凭空想出来的理论。事实上,所有的模式都可以在生活中找到对应。因此,通过主人公小菜和大鸟的对话,将求职、面试、工作、交友、投资、兼职、办公室文化、生活百味等非常接近程序员生活原貌的场景写到了书中,用一个个小故事来引出模式,会让读者相对轻松地进入学习设计模式的状态。当然,此举的最大目的还是为了深入浅出,而非纯粹噱头。
本书内容
本书通篇都是以情景对话的形式,用一个又一个的小故事或编程示例来组织的。全书共分为四个部分。
开篇是楔子,主要向不熟悉面向对象编程的读者给出一个观念说明,并通过一个例子的演变介绍类、封装、继承、多态、接口等概念。
第二部分(第4~5章,第11章)是面向对象的意义和好处以及几个重要的设计原则—通过小菜面试的失败引出。
第三部分(第1~3章、第6~10章、第12~28章)是详细讲解23个设计模式。
第四部分(第29章)是对设计模式的总结,利用小菜梦到的超级模式大赛的场景,把所有的面向对象和模式概念都拟人化来趣味性地总结设计模式之间的异同和关键点。
本书人物及背景
小菜:原名蔡遥,22岁,上海人,上海某大学计算机专业四年级学生,成绩一般,
考研刚结束,即将毕业,正求职找工作,梦想进大厂。
大鸟:原名李大辽,29岁,小菜的表哥,云南昆明人,毕业后长期从事软件开发和
管理工作,近期到上海发展,借住小菜家在宝山的空房内。
小菜以向大鸟学习为由,也从市区父母家搬到宝山与大鸟同住。
本书研读方法
本书建议按顺序阅读,如果您感觉由于面向对象知识的匮乏(例如对继承、多态、
接口、抽象类的理解不足)造成阅读上的困难,不妨先阅读楔子的“培训实习生—面向对象基础”部分,然后再从第1章开始阅读。如果您已经对不少设计模式很熟悉,也不妨挑选不熟悉的模式章节阅读。
本书中的很多精华都来自许多大师作品,建议读者通过笔记形式记录,这将有助于您的记忆和理解设计模式,增强最终的读书效果。
本书中出现的“[ ]”表示句子摘自某书。例如,“策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响使用算法的客户[DP]。”其中“[DP]”表示此句摘自《设计模式:可复用面向对象软件的基础》,详细摘要说明请参看参考文献。
本书第29章中的虚拟人物姓名都是软件编程中的专业术语,因此凡是专业术语被影射人物姓名的都用紫色字表示,以和实际术语区分。例如,“第一位是我们OOTV创始人,面向对象先生”,这里的紫色字面向对象指人名。
关于本书学习的疑问解答看本书需要什么基础?主要是Java或其他编程语言的基础知识,如变量、分支判断、循环、函数等编程基础,关于面向对象基础可参看本书的楔子(第0章)。
设计模式是否有必要全部学一遍?答案是,Yes!别被那些说什么设计模式大多用不上,根本不用全学的舆论所左右。尽管现在的设计模式远远不止23种,但对所有的都有研究是不太容易的,就像作者本人一样,在学习GoF总结的23个设计模式过程中,你会被那些编程大师们进行伟大的技术思想洗礼,不断增加自己对面向对象的深入理解,从而更好地把这种思想发扬光大。这就如同高中时学立体几何感觉没用,但当你装修好房子购买家具时才知道,有空间感,懂得空间计算是如何重要,你完全可能遇到买了一个大号的冰箱却放不进厨房,或买了开关门的衣橱(移门不占空间)却因床在旁边堵住了门而打不开的尴尬。
重要的不是你将来会不会用到这些模式,而是通过这些模式让你找到“封装变化”“对象间松散耦合”“针对接口编程”的感觉,从而设计出易维护、易扩展、易复用、灵活性好的程序。成为诗人后可能不需要刻意地按照某种模式去创作,但成为诗人前他们一定是认真地研究过成百上千的唐诗宋词、古今名句。
如果说,数学是思维的体操,那设计模式,就是面向对象编程思维的体操。
我学了设计模式后时常会过度设计,如何办?
作者建议,暂时现象,继续努力。
设计模式有四境界:
没学前一点不懂,根本想不到用设计模式,设计的代码很糟糕。
学了几个模式后,很开心,于是到处想着要用自己学过的模式,于是时常造成大话设计模式 | 【Java溢彩加强版】
误用模式而不自知。
..学完全部模式时,感觉诸多模式极其相似,无法分清模式之间的差异,有困惑,但深知误用之害,应用之时有所犹豫。
..灵活应用模式,甚至不应用具体的某种模式也能设计出非常优秀的代码,以达到无剑胜有剑的境界。
从作者本人的观点来说,不会用设计模式的人要远远超过过度使用设计模式的人,从这个角度讲,因为怕过度设计而不用设计模式显然是因噎废食。当你认识到自己有过度使用模式的时候,那就证明你已意识到问题的存在,只有通过不断的钻研和努力,你才能突破“不识庐山真面目,只缘身在此山中”的瓶颈,达到“会当凌绝顶,一览众山小”的境界。
编程语言的差异
本书讲的是面向对象设计模式,是用Java语言编写,但本书并不是主要讲解Java语言的图书,因此本书同样适合C#、VB.NET、C 等其他一些面向对象语言的读者阅读来学习设计模式。
就C#而言,主要差异来自C#对于子类继承父类或实现接口用的都是“:”,而Java中两者是有区别的。
当Cat继承抽象类Animal时,C#语法是:
public class Cat : Animal
当Superman实现接口IFly时,C#语法是:
public class Superman : IFly
然后C#类中的方法,如果父类是虚方法,需要子类指定new或是override修饰符。还有一些其他差异,但基本都不影响本书的阅读。
C 的程序员,可能在语言上会有些差异,不过本书应该不会因为语言造成对面向对象思想的误读。
本书代码下载
尽管本书中的代码都提供下载,但不经过读者的自己手动输入过程,其实阅读的效果是大打折扣的。强烈建议读者根据样例自己写程序,只有在运行出错,达不到预期效果时再查看本书提供的源程序,这样或许才是最好的学习方法。有问题可及时与我联系。博客是http://cj723.cnblogs.com/。
本书课件下载
读者群
读者在学习过程中遇到的问题,可以加入本书QQ群讨论。另外,本书虽然经历了十几年的迭代锤炼,依然可能存在错误。读者群会随时更新勘误文档。
首先要感谢我的妻子李秀芳对我写作本书期间的全力支持,没有她的理解和鼓励,就不可能有本书的出版。
父母的养育才有作者本人的今天,本书的出版,寻根溯源,也是父母用心教育的结果。养育之恩,没齿难忘。
本书起源于本人在“博客园”网站的博客http://cj723.cnblogs.com/中的一个连载文章《小菜编程成长记》。没想到连载引起了不小的反响,网友普遍认为本人的这种技术写作方式新颖、有趣、喜欢看。正是因为众多网友的支持,本人有了要把GoF的23种设计模式全部故事化的冲动。非常感谢这些在博客回复中鼓励我的朋友。
这里需要特别提及洪立人先生,他是本人在写书期间共同为理想奋斗的战友,写作也得到了他的大力支持和帮助。在此对他表示衷心的感谢。
写作过程中,本人参考了许多国内外大师的设计模式的著作。尤其是《设计模式》(作者:简称GoF的Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides)、《设计模式解析》(作者:Alan Shalloway,James R. Trott)、《敏捷软件开发:原则、模式大话设计模式 | 【Java溢彩加强版】
与实践》(作者:Robert C.Martin)、《重构—改善既有代码的设计》(作者:Martin Fowler)、《重构与模式》(作者:Joshua Kerievsky)、《Java与模式》(作者:阎宏),等等,没有他们的贡献,就没有本书的出版。也希望本书能成为更好阅读他们这些大师作品的前期读物。
写作过程中,本人还参考了http://www.dofactory.com/关于23个设计模式的讲解,并引用了他们的结构图和基本代码。在博客园中的许多朋友,如张逸、吕震宇、李会军、idior、Allen Lee的博文,MSDN SmartCast中李建忠的讲座,CSDN博客中的大卫、ai92的博文,网站J道www.jdon.com的版主banq的文章都给本人的写作提供了非常大的指引和帮助,在此表示感谢。另外,博客园的双鱼座先生还对本人的部分代码提出了整改意见,也表示衷心的谢意。详细参考资料与网站链接见参考文献。
事实上,由于本人长期有看书记读书笔记的习惯,所以书中引用笔记的内容,也极有可能是来自某本书或者某个朋友的博客、某个网站的文章。而本人已经无法一一说出其引用的地址,但这些作者的智慧同样对本书的写作带来了帮助,在此只能说声谢谢。
最后,对清华大学出版社表示由衷的感谢。
程 杰
2022年9月
评论
还没有评论。