阅读指南:

精读一章内容,手工输入一章代码(注1),与书中描述的思想进行印证,实在搞不懂就放过吧。设计模式绝对不会一次就看懂的。

这本书对于理解设计模式很有帮助,就是例子不太符合中国人的思维模式,但是坚持下去肯定会搞明白的。

全书精华:

1. Chap12的Ducks,通过一点点重构Ducks程序,将模式一个个加入其中,帮助对模式的深入理解。

2. Chap12的DJView,通过一个完整的MVC程序,将Observer、Strategy、Composite以及Adapter模式用架构层面的设计整合起来,不仅可以更好地理解单个模式,还可以理解MVC模式。

尽可能对每个模式写出自己的总结

  1. Strategy(策略模式):定义一组算法类,用于运行过程中替换算法。
    • 封装变化
    • 多用组合,少用继承
    • 多针对接口编程,少针对实现编程
  2. Observer(观察者模式):定义一个主题和一组观察者,可以在主题变化时通知订阅了主题的观察者。
    • Strategy封装的是函数调用的算法。
    • Observer封装的是传递数据的内容。
    • 交互对象之间强内聚、松耦合。
  3. Decorator(装饰模式):本质不变,外面增加一层层装饰。例如:Stream的包装。
    • 设计的类,禁止修改,允许扩展。
    • 不采用继承的方式来扩展功能。
  4. Factory(工厂模式):所有的工厂都是用来封装对象的创建。
    • Simple Factory(简单工厂):将业务逻辑与对象创建操作分离开。
    • Factory Method(工厂方法):把对象的创建工作委托给子类的工厂方法。
    • Abstract Factory(抽象工厂):把对象的创建工作委托给实现了接口的工厂方法。
    • 依赖于抽象,而不依赖于具体的类。
  5. Singleton(单例模式):通过禁止其他对象对自己实例化,而改由自己的静态方法对自己实例化,确保一个类只有一个对象。
  6. Command(命令模式):解耦调用者与执行者之间的关系,相互之间的联系通过命令对象完成,调用者只对调用对象的execute()方法发出请求。
  7. 改造已有系统接口,使异构系统也可透明地相互调用。
    • Adapter(适配器):将一个类的接口转换成客户期望的另一个接口。例:数据库连接
    • Facade(门面模式):将一组接口转换成客户期望的单一接口。例:设备驱动程序
    • 最小知识原则:调用其他方法时,涉及的对象越少越好。
      • 对象调用自己的方法
      • 对象调用作为参数传入的对象的方法
      • 对象调用自己的方法创建的对象或实例的方法
        • (以上三点强调:不要调用其他方法返回的对象的方法)
      • 对象调用自身组件的方法
  8. Template(模板模式):封装算法,在一个方法中定义一个算法的框架,而将具体的实现委托给子类。框架中调用的方法为钩子,从而超类控制一切,子类实现钩子等待超类调用。
    • 好莱坞原则:别找我,我会去找你。
  9. Collections(集合):
    • Iterator(迭代器):遍历集合而无须暴露集合的实现
    • Composite(组合模式):可以将对象的集合和单个对象组合在一起。
    • 类应该只有一个改变的理由。
  10. State(状态模式):将状态封闭为对象,将行为封装成方法;新的状态生成新对象,新的行为生成新的方法。
    • 行为不变,状态改变用State
    • 行为改变,状态不变用Strategy
  11. Proxy(代理模式):采用创建代理对象的方式控制客户端对具体对象的访问。
    • 远程代理管理客户端和远程对象之间的交互;
    • 虚拟代理控制实例化开销大的对象;
    • 保护代理控制客户端对具体对象的访问。
  12. Compound(复合模式):MVC-Model,View,Controller
    • Model与View之间使用Observer模式。Model是Subject,View是Observer,当Model改变时通知View发生改变。View只从Model中获取数据(例如:调用Model的getXXX()方法),不修改Model的数据(例如:不调用Model的SetXXX()方法),不操作Model的行为(例如:不调用Model的行为方法)。
    • Controller与View之间是Strategy模式。View只对Controller的接口编程,不与具体的Controller实现耦合,从而可以面对不同的Controller实现不同的行为。
    • View自身使用Composite模式。
    • 还可以使用Adapter模式,使已经存在的Controller和View与Model适配。

注:

1. 源代码一定要去下载,书上的代码内容不够

2. 设计模式并不复杂,这23种模式的理解之一就是介绍如何针对接口编程

编程思路的演变:针对函数编程→针对对象编程→针对接口编程

Head First设计模式读书笔记的更多相关文章

  1. HeadFirst设计模式读书笔记--目录

    HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern) HeadFirst设计模式读书笔记(2)-观察者模式(Observer Pattern) HeadFirst设计 ...

  2. Head First 设计模式读书笔记(1)-策略模式

    一.策略模式的定义 策略模式定义了算法族,分别封装起来,让它们之间可以互换替换,此模式让算法的变化独立使用算法的客户. 二.使用策略模式的一个例子 2.1引出问题 某公司做了一套模拟鸭子的游戏:该游戏 ...

  3. JavaScript设计模式:读书笔记(未完)

    该篇随我读书的进度持续更新阅读书目:<JavaScript设计模式> 2016/3/30 2016/3/31 2016/4/8 2016/3/30: 模式是一种可复用的解决方案,可用于解决 ...

  4. Head First 设计模式读书笔记

    在网上学习了一段时间设计模式,总感觉不系统,很容易忘,最近买书,学习了<Head First设计模式>,受益匪浅,特做此记录,以便激励自己不断的向后学习. 原书JAVA版本,本次学习记录及 ...

  5. <代码整洁之道>、<java与模式>、<head first设计模式>读书笔记集合

    一.前言                                                                                       几个月前的看书笔记 ...

  6. head first 设计模式读书笔记 之 策略模式

    作为一个php开发者,深知曾经很多程序员都鄙视php,为什么呢?因为他们认为php的语法是dirty的,并且由于开发者水平参差不齐导致php的代码更加乱上加乱,维护起来简直一坨shit一样.随着php ...

  7. JavaScript设计模式 -- 读书笔记

    JavaScript设计模式 一. 设计模式 一个模式就是一个可重用的方案: 有效的解决方法.易重用.善于表达该解决方案: 未通过"模式特性"测试的模式称为模式原型: 三规则:适用 ...

  8. JavaScript设计模式读书笔记之一:接口

    接口 在JavaScrip中模仿接口 用注释描述接口 用属性检查模仿接口 用鸭式辨型模仿接口 依赖于接口的设计模式 工厂模式 组合模式 装饰者模式 命令模式 接口 在JavaScrip中模仿接口 用注 ...

  9. HeadFirst设计模式读书笔记之工厂模式

    1. 简单工厂 1. 你开了一家披萨店,点披萨的方法可能是这样: public Pizza orderPizza(String type) { Pizza pizza; if (type.equals ...

随机推荐

  1. 你真的知道final关键字吗?

    概述 final在英文中是最终的,不可更改的.在Java中final修饰变量,函数和类,就像这个单词的意思,一旦使用赋值之后不可更改. final修饰的变量不可以被改变 finalTest类 publ ...

  2. zookeeper源码 — 二、集群启动—leader选举

    上一篇介绍了zookeeper的单机启动,集群模式下启动和单机启动有相似的地方,但是也有各自的特点.集群模式的配置方式和单机模式也是不一样的,这一篇主要包含以下内容: 概念介绍:角色,服务器状态 服务 ...

  3. 使用ESMap的地图平台开发三维地图

      本文简单的介绍使用ESmap的SDK开发(DIY自己地图的)一个地图的过程.若有不足,欢迎指正. 一.创建地图 只需四步,从无到有,在浏览器中创建一个自己的三维地图,炫酷到爆! 第一步:引入ESM ...

  4. 零基础怎么学java

    首先告诉你的是,作为一个初学者想转行学习Java并不是很容易,Java本身是具有一定难度的,虽然说兴趣这东西可以让我们学习不累,但是有多少人学习是因为兴趣,或者有多少人知道自己的兴趣在哪?所以我很明确 ...

  5. RK3399配置笔记

    1. adb shell 默认超级管理员 在build/core/main.mk下将ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1改成ADDITIONAL_D ...

  6. asp.net core系列 53 IdentityServer4 (IS4)介绍

    一.概述 在物理层之间相互通信必须保护资源,需要实现身份验证和授权,通常针对同一个用户存储.对于资源安全设计包括二个部分,一个是认证,一个是API访问. 1 认证 认证是指:应用程序需要知道当前用户的 ...

  7. 『片段』ShellHelper 控制台程序 的 程序调用(支持输入命令得到返回字符串输出)

    背景: > 之前做 OGG 时,被 OGG的配置 恶心到了.(OGG是啥,这里就不解释了) > 总之就是一个 控制台程序,总是得手动执行一堆命令,每次都得输入 —— 实在是打字打累了. & ...

  8. <转载>Android性能优化之HashMap,ArrayMap和SparseArray

    本篇博客来自于转载,打开原文地址已经失效,在此就不贴出原文地址了,如原作者看到请私信我可用地址,保护原创,人人有责.   Android开发者都知道Lint在我们使用HashMap的时候会给出警告—— ...

  9. Cron表达式详解【转】

    Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month ...

  10. 在阿里云服务器windows server2012r iis上部署.net网站

    先说一堆废话:之前在阿里云上租了一个服务器,也配置了相关的环境,然后准备把自己手上的一个小网站挂上去,就按照我的上篇博客记载的方法把发布好的网站发布到服务器的iis上,结果发布之后死活访问不了,始终显 ...