Part 0 闲聊

Part 1 闲聊

首先,想告诉大家的是,《Head First 设计模式》是一本通俗易懂的书,无论是在校大学生还是工作3,5年后的码农们,读来应该都是轻松➕愉快的。至少此书比权威书籍——四人组的《设计模式》容易理解和坚持看完。而我是花了2个月的晚上和周末断断续续时间看完的,别被这637页的厚度给吓倒了,很多插图和叙述是可以带着看小书的心情和节奏去完成的。其实你会给自己立一个flag,最好能落实到天、小时,这样执行到位不到位就很一目了然了。下面是我的阅读时间表,时间上算是很宽裕了,因为我还预估了思考和对比记忆的时间。

一共14章,预计2个月完成(10月中旬~截止日期12-15)
1周2章,2天1章,1章40页,1天20页(早上1个小时+晚上)目标1:11月1号看完第5章,即190页
目标2:11月29号看完第13章,4周8章,即610页
目标3:12月15号完成本书第一遍阅读

Part 2 内容

我们知道四人组的《设计模式》共介绍了23种,并且将其分成3类,分别是:创建型、结构型、行为型,如下所示:

  • 创建型5个。工厂方法模式、抽象工厂模式、Builder模式(Retrofit)、单例模式(类初始化)、原型模式
  • 结构型7个。适配器模式、装饰模式(File操作)、代理模式(静态代理——代理对象内部操作委托对象、动态代理——代理对象里面不指定特定的委托对象,更加灵活)、组合模式、桥接模式、外观模式、享元模式
  • 行为型11个。观察者模式(RxJava)、策略模式(用策略模式的多态代替switch)、模板方法模式、命令模式、迭代器模式(集合的Iterator)、中介者模式、备忘录模式、解释器模式、状态模式、责任链模式、访问者模式

《Head First 设计模式》的主要内容就是,前面用1~11章介绍他们觉得常用的14个设计模式;然后用12章介绍了MVP复合模式包含的设计模式;紧接着的13章分享了设计模式的概念、分类以及反模式等对设计模式的思考与感悟;这里也和目录后面第1章前面的引子想呼应,对于思考的思考;最后第14章各用2页介绍剩余的9个设计模式。

下面我们进入本文的重点,看看每章的核心内容,更详细的内容还需读者亲自品味。

1)策略(Strategy)模式
  • 面向对象(oo)基础:抽象、封装、多态、继承;
  • oo设计特性:可复用、可扩充、可维护;
  • oo原则:封装变化(把会变化的部分取出并封装起来,好让其他部分不会收到影响)、多用组合、少用继承(组合可以委托(外包))、针对接口编程,不针对实现编程;
  • oo模式:策略模式,定义算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
2)观察者(Observer)模式
  • oo原则:为交互对象之间的松耦合设计而努力(更有弹性、更能应对变化和将互相依赖降到了最低);
  • oo模式:观察者模式,在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
3)装饰者(Decorator)模式
  • oo原则:开闭原则(对扩展开放,对修改关闭);
  • oo模式:装饰者模式,动态地将责任附加到对象上,想要扩展功能,装饰者提供有别于继承的另一种选择。
4)工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式
  • oo原则:依赖抽象,不要依赖具体类;
  • oo模式:工厂方法模式,定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类;抽象工厂模式,提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
5)单例(Singleton)模式
  • oo模式:单例模式,确保一个类只有一个实例,并提供全局访问点。
6)命令(Command)模式
  • oo模式:命令模式,将请求封装成对象,这可以让你使用不同的请求、队列,或者日志请求来参数化其他对象,命令模式也可以支持撤销操作。
7)适配器(Adapter)模式、外观(Facade)模式
  • oo原则:最少知识原则,只和你的密友谈话;
  • oo模式:适配器模式,将一个类的接口,转换成客户期望的另一个接口;外观模式,提供了一个统一的接口,用来访问子系统中的一群接口。
8)模版方法(Template)模式
  • oo原则:好莱坞原则,别调用我们,我们会调用你;
  • oo模式:模版方法模式,在一个方法中定义一个算法的骨架,将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤;
  • 内容还包括:与策略模式的对比,它们都封装算法,一个用组合,一个用继承。
9)迭代器(Iterator)模式、组合(Composite)模式
  • oo原则:类应该只有一个改变的理由;
  • oo模式:迭代器模式,提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示;组合模式,允许你将对象组成树形结构来表现整体/部分的层次结构,组合能让客户以一致的方式处理个别对象和对象组合。
10)状态(State)模式
  • oo模式:状态模式,允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类;
  • 内容还包括:状态模式与策略模式的区别,它们类图一样,意图不同。
11)代理(Proxy)模式
  • oo模式:代理模式,为另一个对象提供一个替身或占位符以访问这个对象(远程代理、动态代理、虚拟代理、保护代理、缓存代理。。。);
  • 内容还包括:代理模式与装饰者模式的区别,装饰者模式为对象加上行为,而代理则是控制访问。
12)MVC
  • oo模式:复合模式,结合2个或2个以上的模式,组成一个解决方案,解决一再发生的一般性问题;
  • MVC,M使用观察者模式,V使用组合模式,C使用策略模式。

Part 3 小手册

下面是本书的一个集合小手册的照片:

Part 4 心得

  • 设计模式并不是传说中的那么难,从《设计模式》到《大话设计模式》,再到《Head First 设计模式》,后浪在前浪的基础上再此咀嚼,以留给未来的后浪观摩学习,变得越来越大白话、简单,其实核心思想还是没变,就像我们还是打工人一样。
  • 学以致用吧,得到再好的思想、再好的工具,不实操的话永远只是纸上谈兵,应该在需要的时候就用上。
  • 自己也想做一个设计模式的安利者,学到的就是赚到的,我希望其他小伙伴也能赚得盆满钵满。

简单理解-Head First 设计模式相关推荐

  1. php 设计模式好处,PHP 简单的几个设计模式(个人理解)

    设计模式六大原则 开放封闭原则:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象. 依赖倒置原则:高层模块不应该依赖低层模块,二者 ...

  2. 我对XCode Objective-c Cocoa的简单理解

    我对XCode Objective-c Cocoa的简单理解 Xcode Xcode说的通俗一点就是开发OS X 和 iOS 应用程序的. 如果我们想要认真点说 ,Xcode 是运行在操作系统Mac ...

  3. JDK 动态代理的简单理解

    http://www.cnblogs.com/luotaoyeah/p/3778183.html JDK 动态代理的简单理解 动态代理 代理模式是 Java 中的常用设计模式,代理类通过调用被代理类的 ...

  4. Android:安卓学习笔记之OkHttp原理的简单理解和使用

    Android OkHttp使用原理的简单理解和使用 OkHttp 0.前言 1.请求与响应流程 1.1 请求的封装 1.2 请求的发送 1.3 请求的调度 1.4 请求的处理 2.拦截器 2.1 R ...

  5. android 点击事件消费,Android View事件分发和消费源码简单理解

    Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开 ...

  6. 【转载】Deep learning:十九(RBM简单理解)

    Deep learning:十九(RBM简单理解) 这篇博客主要用来简单介绍下RBM网络,因为deep learning中的一个重要网络结构DBN就可以由RBM网络叠加而成,所以对RBM的理解有利于我 ...

  7. 学习:双机热备、集群、负载均衡、SQL故障转移群集简单理解(转)

    双机热备.集群.负载均衡.SQL故障转移群集简单理解平常,大家常提到几个技术名词:双机热备.集群.负载均衡.SQL故障转移群集.这里,就我的理解,和大家简单探讨下,有不足或错误之处还请各位指出! 这些 ...

  8. 字符串匹配算法Java_如何简单理解字符串匹配算法?

    这篇文章来说说如何简单理解KMP,BM算法.之前看过一些文章说,KMP算法很难理解. 可我并不觉得. 我反而觉得它容易理解.平时我们写java代码的时候, 判断一个字符串是否存在包含另一个字符串都是直 ...

  9. python yield的简单理解

    2019独角兽企业重金招聘Python工程师标准>>> yield是个生成器,它可以使一个方法变成可迭代的方法,每次迭代返回yield后面的值 简单理解: >>>d ...

  10. linun——SElinux的简单理解

    SElinux简单理解 一.什么是SElinux? SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Co ...

最新文章

  1. Injection of @Reference dependencies failed;
  2. 单元格编辑后级联汇总刷新
  3. 全球99家AI芯片公司,中国占15家!
  4. 阿里开源了一项自研核心技术 Pouch!
  5. java调用wvsc.exe_c语言 函数的调用方法
  6. 5.8Reformer 意境级理解
  7. 关于SCM供应链管理系统开发思路
  8. HBase 从下载到安装和运行
  9. Visual studio C++:LQR轨迹跟踪仿真
  10. 最新解决方法This template did not produce a Java class or an interface
  11. dlib实现人脸识别方法
  12. 一个喜欢搜罗软件的哥们
  13. 关于虚拟机闪退及无法启动的问题
  14. 轻量级容器主机 Photon OS
  15. 小布老师讲座笔记(三)
  16. 【51单片机】花式流水灯
  17. 在最熟知的芯片,解析最不为人知的秘密--Nordic的蓝牙芯片nRF52832。
  18. Java+JSP+Mysql+Tomcat实现Web图书管理系统
  19. 酷开系统,打造更多可能
  20. Python+Vue计算机毕业设计安康学院教师职称评定考核系统0n8mq(源码+程序+LW+部署)

热门文章

  1. 用户故事与敏捷方法—发布计划
  2. MySQL OCP认证(文末附参考题)
  3. 学校老师要求微信群里的家长下载钉钉建群,解散微信群,钉钉是不正当商业竞争吗?
  4. 操作系统的起源与发展历程
  5. 目前3个最受欢迎的免费、开源文件加密软件评测
  6. 【CFD学习】yplus,y+,边界层理论,壁面第一层网格
  7. 直线绘制算法-数值微分法(DDA)
  8. 【转】RIS/PACS系统实施过程中Worklist的配置与调试
  9. dnf时装预览怎么打开_dnf怎么查找各职业时装代码
  10. 地籍图 cad cass 二次开发 过滤器过滤扩展数据组码1000的解决方案