《漫画设计模式》围绕主人公“兔小白”和“熊小猫”的对话展开,辅以百余张贴合内容、生动形象的手绘插画,以轻松、幽默的方式讲解GoF的23种设计模式。
《漫画设计模式》共27章,第1、2章简要介绍设计模式和设计原则,第3~26章详细介绍设计模式,第27章重点讲解从23种设计模式中提炼的10种设计手法。各章的内容结构为:首先,从现实生活中的常见案例切入,讲解设计模式的结构、功能、优势和意图,使读者形成具象的宏观认知;然后,将案例作为编码练习,使用Java语言开发,并在一次次代码重构中完善程序设计,引导读者思考程序设计中的问题和解决思路;最后,自然而然地引出设计模式的结构图和适用场景等。
《漫画设计模式》既适合具备一定面向对象语言基础且希望提升程序设计水平的开发人员,也适合想要系统学习设计模式的程序员,还可作为高等院校计算机等相关专业师生的参考资料。
李一鸣,笔名“爱码叔”,从事软件研发工作近20年,擅长用通俗易懂的语言、妙趣横生的漫画讲解IT技术,为枯燥的技术学习过程增添趣味性。曾就职于Thoughtworks、联想集团等公司,作为系统架构师和技术负责人参与多个大型软件项目,有着丰富的系统设计和架构经验。慕课网专栏作者,开设《Java并发编程学习宝典(漫画版)》和《设计模式入门》教程。曾与同事合作创办播客“程序员新声”,关注程序员成长和技术热点。
学习建议
在阅读本书前,首先,需要具备Java语言或其他面向对象语言的编程基础。为了降低阅读门槛,书中代码尽可能使用最基本的语法,对编程水平的要求并不高。其次,需要了解面向对象的特性——封装、继承、多态。书中有大量的程序结构图,只要具备基础的UML知识,便可以读懂。
我建议,设计模式的初学者先阅读本书的前两章,在对设计模式有了一定程度的认知,并了解设计原则后,再开始学习各种设计模式。若在学习之初难以完全理解设计原则也不必担心,在后面的章节中,我会结合设计模式多次讲到常见的设计原则。书中对每种设计模式的讲解独立成章,读者既可以按顺序阅读,也可以按照自己的需要选择阅读。
本书从生活中常见的例子切入,展开对每种设计模式的讲解。读者可以跟随这些例子拓展思维,思考这样设计带来了什么收益、涉及哪些主体、主体间如何配合、各自的职责是什么。设计模式是一种思想,学习设计模式重在悟透设计思想,而不是急于用代码实现。
书中有大量的示例代码,建议读者在阅读的同时动手实践,以便加深记忆和理解。在工作中,如果想使用某种设计模式,可以参考这些代码,但真实的场景远比书中的例子复杂得多。读者可以先从形式上开始模仿,当能够灵活运用设计思想解决问题时,形式反而没那么重要了。大胆应用,是真正掌握设计模式的必经之路。
本书特色
本书采用老师与学生对话的形式进行讲解,为此我虚构了两个人物:学生是初入职场的程序员——兔小白,老师是有着多年经验的开发经理——熊小猫。
本书的写作特色如下。
(1)模拟一对一教学场景。技术图书通常是作者以第一人称进行讲解的,给我的阅读感受像是在听一位老师讲课。本书模拟一对一教学场景:我先站在老师的角度讲解,通过提问启发学生;然后切换身份,想象自己作为学生,在听完这段讲解后会提出什么问题。本书试图为读者营造身临其境地接受一对一教学的感受,在一问一答中探索设计模式的奥秘。
(2)从熟悉的生活场景切入。从日常生活中的一个小故事开始对每种设计模式进行讲解,让读者通过身边熟悉的事物来联想并了解设计模式。
(3)重现程序设计的演变过程。本书在提出问题后,并不立即使用设计模式解决问题,而是先从直觉化的程序设计开始,逐步演变到如何使用设计模式开发。熊小猫启发兔小白重构程序的过程正是开发者设计程序时的思考过程。
(4)大量的手绘插画。在讲解关键概念时,配以漫画辅助理解。人脑更乐于接收图像信息,对图像的记忆长度要远超文字。幽默风趣的漫画不仅可以加深印象,而且可以缓解学习时的枯燥感。
(5)独有的设计手法。设计原则是程序设计的理论基石,设计模式是特定问题的方案总结。二者之间其实还有很多设计小技巧,我称之为“设计手法”。设计手法不针对特定问题,而是达成设计原则的小技巧,不同的设计模式使用同样的设计手法。这好比在足球运动中,踢出弧线球是一种技巧,弧线球既可以用在传球的场景中,也可以用在射门的场景中。
本书内容
软件需要架构,图书同样需要架构。本书的内容架构分为3个部分。
第一部分为开篇,在正式讲解设计模式之前,简要介绍设计模式和设计原则。
第1章“设计模式从何而来”,主要介绍设计模式产生的背景。
第2章“一体式电源与组合式电源——软件设计原则”,通过设计电脑电源的案例引出六大设计原则。
第二部分进入正题,讲解23种设计模式。
第3章“想吃汉堡,自己做还是去汉堡店?——简单工厂模式”,通过兔小白如何取得一个汉堡的例子,引出简单工厂模式。简单工厂模式虽然简单且不在23种设计模式中,但是体现了多种设计原则。
第4章“座座工厂平地起——工厂方法模式”,以专精程度更高的厨房为例,引出工厂方法模式。
第5章“工厂品类要丰富——抽象工厂模式”,通过便利店更换关东煮供货商的例子,引出抽象工厂模式,并对3种工厂模式进行比较。
第6章“组装电脑的学问——生成器模式”,通过总监负责电脑组装流程、工人负责具体步骤的例子,讲解生成器模式。
第7章“还记得克隆羊多莉吗?——原型模式”,通过克隆羊的例子,引出原型模式。
第8章“干活全靠我一人——单例模式”,通过项目经理身兼数职的例子,讲解单例模式。
第9章“电源插座标准再多也不怕——适配器模式”,通过电源转接头的例子,讲解适配器模式。
第10章“一桥飞架南北,天堑变通途——桥接模式”,通过游戏机和游戏卡分离的例子,讲解桥接模式。
第11章“树状结构也是一种设计模式?——组合模式”,通过公司人力地图的例子,讲解组合模式。
第12章“人靠衣装马靠鞍——装饰模式”,以美颜相机为例,讲解装饰模式。
第13章“为什么加盟快餐店越来越多?——外观模式”,通过以加盟模式开快餐店的例子,讲解外观模式。
第14章“棋类游戏中的设计模式——享元模式”,以在消消乐游戏中如何避免生成大量棋子实例为例,讲解享元模式。
第15章“办事不必亲自出面——代理模式”,以代理办理签证为例,讲解代理模式。
第16章“谁来决定需求变更的命运?——职责链模式”,以项目的一次需求变更审批为例,讲解职责链模式。
第17章“操作再多,也不必手忙脚乱——命令模式”,以项目上线时团队成员如何配合为例,讲解命令模式。
第18章“点菜也需要翻译——解释器模式”,通过饭店点菜终端将键盘输入转化为点菜单的例子,讲解解释器模式。
第19章“地铁安检,谁都逃不掉——迭代器模式”,以地铁排队安检为例,讲解迭代器模式,并介绍Java中的迭代器实现。
第20章“房产中介的存在价值——中介者模式”,以房产中介在租房业务中的作用为例,讲解中介者模式。
第21章“物业通知,每户必达——观察者模式”,以物业发布通知为例,讲解观察者模式,并介绍Java中的观察者模式实现。
第22章“甲方要求改回第一版——备忘录模式”,以数次改版演唱会海报设计为例,讲解备忘录模式。
第23章“状态改变行为——状态模式”,以将立体车库的行为绑定在运行状态上为例,讲解状态模式。
第24章“购买手机选项多,如何选购是难题——策略模式”,以根据不同的策略选购手机为例,讲解策略模式。
第25章“遵循套路,不走弯路——模板方法模式”,以自动挡和手动挡汽车的起步操作为例,讲解模板方法模式。
第26章“尊重个体差异,提供个性化服务——访问者模式”,以不同级别员工的年终奖计算差异为例,讲解访问者模式。
第三部分总结23种设计模式,提炼设计手法。
第27章“设计模式总结”,总结了面向对象、设计原则、设计模式三者的关系,并讲解从23种设计模式中提炼出来的10种设计手法。