• 书本简介
  • 个人感想
  • 参考文献

1.书本简介

设计模式不仅仅是面试的时候会用到,在进行构件设计时必然会涉及到相关思想,例如Java I/O流中的装饰模式,Spring源码中的责任链、代理、观察者模式。所以可谓必修之课。

书本分为了2个部分,第一部分为前11章,运用各种生动有趣的生活化例子介绍了常用的设计模式,例如鸭子、气象站、咖啡店、披萨店。第二部分为后三章,包含了对全书的总结、没介绍但是依然重要的设计模式们。
  第一章“设计模式入门”。用真是鸭子和橡皮鸭的叫声不同的需求,来为我们展现了设计模式的作用和OOP中的“面向接口编程”思想。
  第二章“观察者模式”。用气象站不同公示板展示不同种类的参数的需求,为我们展示了如何通过该模式建立一个扩展性强,满足“开闭原则”的构件。
  第三章“装饰者模式”。模拟的是咖啡店冲泡咖啡的价格计算。每多一种原料,便用的原料类装饰一下咖啡,增添咖啡的价格和描述。原料包括加奶、加糖、豆浆等。
  第四章“工厂模式”。围绕着披萨主题,用不同地区的披萨店的不同味道披萨的创建过程,为我们展示了为什么我们需要工厂模式,以及工厂模式的强扩展性、高可维护性。
  第五章“单件模式”。单例模式在很多场景都会用到,比如Windows的“任务管理器”[1]。该章的单例构造考虑到了多线程情况下的单例数据同步问题,构造了一个经典的单例类。
  第六章“命令模式”。本章模拟一设定了不同命令的遥控器控制家具的情形,通过为遥控器设定不同的命令,即可通过简单的命名按钮控制家具,如电灯、电视、空调。
  第七章“适配器模式与外观模式”。适配器模式的定义——将一个类的接口转换成客户期望的另一个接口,让原本接口不兼容的累可以合作无间,很好的诠释了适配器模式的作用。外观模式个人认为类似“命令模式”,只是该模式下,一个“按钮”包含了多个命令,如家庭影院中,命令模式要逐个按下调暗灯光、打开DVD、投影机、自动屏幕、音响按钮,而外观模式直接按下“看电影”按钮即可。
  第八章“模板方法模式”。这章比较抽象,模板方法的定义是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。例如,为了实现元素的比较,类实现Comparable接口,图形化设计中继承JFram与Applet。
  第九章“迭代器和组合模式”。该章围绕早餐饼屋和正餐店的菜单,展开了这2种模式的描述。迭代器既是一种模式,又是一个Java自带的接口,让目标类提供方法顺序访问自身的集合对象,而又不暴露其内部的表示。该章利用了迭代器打印了2个店子的菜单。
  组合模式十分抽象,其定义是“运行你讲对象组合成树形结构来表现”整体/部分“层次结构,让客户以一致的方式处理个别对象以及对象组合。在该章用例中,树中根节点是”所有菜单“,叶子节点是”菜单项“。
  第十章“状态模式”。本章用的是街头糖果机作为引导例子,糖果机的状态包括无硬币、有硬币、售出糖果、糖果售罄四种状态,由一系列动作引发状态的变换。这让我想到了计算机网络的TCP协议可靠数据传输的原理中的FSM(状态转换机),原来总是想不通如何实现FSM,读完该章犹如醍醐灌顶,酣畅淋漓。
  第十一章“代理模式”。代理模式指的是为另一个对象提供一个替身或占位符以控制对这个对象的访问。这章中例子很多,个人认为好懂的是书中的约会点赞模块,只能给别人点赞评分,不能给自己刷分。然而,代理模式中涉及到Java的反射,这需要有深厚的Java功底。

2.个人感想

榫与卯:天人合一的千年技艺。

古代建筑大师在设计过程中,往往讲究的是细节,总所周知,榫卯被称作家具的“灵魂”,木构件上凸出的榫头与凹进去的卯眼,简单地咬合,便将木构件结合在一起,由于连接构件的形态不同,由此衍生出千变万化的组合方式,使家具达到功能与结构的完美统一[2]。
  这不正是完美解释了“设计模式”的作用么?Java的类在我们手中,犹如一块块或凸或凹的木块,正是“设计模式”的存在,让类之间相互连接、组合,演变出高质量、可扩展、高可用的程序构件。
  父母常常对我说一句话:万丈高楼平地起。不是谁一来就能够成为系统构架师,往往应该学好如何设计一个系统基础构件。
  附上学习过程中随手敲的Demo:https://github.com/BlackButtonCC/HeadFirstDesignPatternDemo

3.参考文献

【1】单例模式的常见应用场景:http://blog.csdn.net/tanyujing/article/details/14160941
【2】榫卯:天人合一的千年技艺灵魂:http://www.cnarts.net/cweb/news/read.asp?id=330624

《Head First设计模式》——榫与卯相关推荐

  1. 怎么把圆角变直角_明式圆角柜的还原(下)——信民木工DIY达人大赛作品

    这个牙板真不好弄,要想做好并不容易,因为这个柜的牙板不仅是装饰功能,还兼具有承重功能,所以,配合要紧凑,力要通过牙板传递到柜脚. (图46 牙板角度) 牙板背面.侧面和正面几个角的角度都不一样,只能是 ...

  2. 2017.04.19 有趣的木楔原理图

    古代木工不需要钉子的秘密,一张张动图告诉你! 我们的祖先真的很牛! ▍榫卯,是古典家具之魂,一榫一卯之间,一转一折之际,凝结着中国几千年传统家具文化的精粹,沉淀着流光回转中的经典家具款式的复合传承. ...

  3. 塔菲尔曲线斜率的大小_中国第一塔,与埃菲尔铁塔齐名,到底有多强悍?

    每年的6月13日,是一个并不起眼的日子,但对于建筑行业的同学来说,却是一个重要的日子. 这一天,正是中华历史中建筑行业祖师爷鲁班的诞辰. 我们熟知鲁班创造了很多处理木材的工具,例如曲尺.墨斗,但他之所 ...

  4. 计算机技术含量,有哪些看似简单却技术含量高的操作?

    感觉是个特别涨姿势的好问题,一进来感觉就能看半天的那种. 那么今天小编也来添砖加瓦一下,为这个问题贡献自己的一份绵薄之力. 对于这个问题,我们分享三个例子: 1.蒸汽计算机 2.榫卯 3.换挡 蒸汽计 ...

  5. 讲中国故事的博主正在变多,李子柒为什么不可复制?

    文 | 曾响铃 来源 | 科技向令说(xiangling0815) 如果不刻意提起,很多人可能想不起来还有个"中国农民丰收节".实际上今年已是第三届. 作为中国首批"中国 ...

  6. HTML圆和圆角柜形的制作,圆角柜——简约不简单

    原标题:圆角柜--简约不简单 圆角柜上窄下宽,具有度的设计造型,让柜子的结构更加坚固.因此,国外常称它为"A字柜",南方多称它为"大小头".圆角柜,在造型设计上 ...

  7. HTML圆和圆角柜形的制作,造型越简单,工艺越复杂--外简内繁的圆角柜

    原标题:造型越简单,工艺越复杂--"外简内繁"的圆角柜 简约质朴,形式简单,结构科学,是明式家具的显著特点.而在这简单造型的背后,往往是复杂的工序, 圆角柜可以说达到了简约的极致, ...

  8. SQL必知必会:自连接(深入浅出自连接的原理与实现)

    先来看代码: SELECT cust_id,cust_name,cust_contact FROM Customers WHERE cust_name=(SELECT cust_name       ...

  9. 设计模式的一些小整理

    ?设计模式 设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠 ...

最新文章

  1. Digg 让 八 动起来,让 八 产生价值
  2. java web 来源页_JavaWeb 分页实现
  3. 【SA 认证课】来啦 这次陪你过双 11
  4. SSM整合——Spring+SpringMVC+MyBatis整合
  5. Scala中的while循环
  6. oracle11优点,争先体味Oracle 11g的新特点
  7. 第22篇 js中的this指针的用法
  8. Postman和postwoman安装及简介
  9. require('module') 是什么?
  10. springmvc的运行原理个人见解
  11. 机器学习04:利用朴素贝叶斯分类器判别网络评论的情绪好坏(航空公司数据集)
  12. Django+redis+celery实现异步任务
  13. 《Occlusion Aware Facial Expression RecognitionUsing CNN With Attention Mechanism》论文阅读(2019TIP)
  14. Lighthouse 激光定位技术开源了,但不是 Valve 做的
  15. springbatch读取文件_Spring Batch读取txt文件并写入数据库的方法教程
  16. DRV8711的通用步进电机驱动器和直流电机驱动器
  17. 计算机组成加减交替法被除数,2019考研408计算机组成原理知识:定点数的表示和运算...
  18. 西门子PLC(S7-1200、1500)通讯程序报16#80C8错误的解决方法
  19. 10G服务器网卡:Intel vs Nvidia
  20. jbod ugood 磁盘驱动状态_英特尔脱坑玩家必看:AMD主板RAID设置介绍

热门文章

  1. Kali Linux 网络扫描秘籍 第一章 起步(二)
  2. Kali Linux 网络扫描秘籍 第三章 端口扫描(二)
  3. Apache Mina实例
  4. uni-app 小程序获取实时定位和车辆签到(wx.onLocationChange方法)
  5. RTX 3080 Linux和Windows 平台兼容性问题
  6. 算法工程师的修养 | Linux 超全总结
  7. 创建第一个three.js三维场景,可通过鼠标缩放与移动方块(vue中使用three.js02)
  8. could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
  9. 找茬游戏中是如何设计两个图片的不同之处的
  10. 2019新一波收购风暴来袭,科技巨头成功解锁“买买买”模式