[读书笔记] Head First 设计模式
OO基础
- 抽象
- 封装
- 多态
- 继承
OO原则
| 原则 | 描述 |
| 封装变化 |
找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混合在一起。 把会变化的部分取出来并“封装”起来,好让其他部分不受到影响。 |
| 多用组合,少用继承 |
使用组合建立系统具有很大的弹性,不仅可以将“算法族”封装成类,更可以“在运行时动态地改变行为”,只要组合的行为对象符合正确的接口标准即可。 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。 |
| 针对接口编程,不针对实现编程 | 针对接口编程,真正的意思是针对“超类型”编程,关键就在多态。 |
| 为交互对象之间的松耦合设计而努力 | |
| 类应该对外扩展开放,对修改关闭 | |
| 依赖倒置原则 |
要依赖抽象,不要依赖具体类。 该原则相对于“针对接口编程,不针对实现编程”来说,更加强调“抽象”。 该原则说明: 1. 不能让高层组件依赖低层组件 1.1 当你直接实例化一个对象时,就是在依赖它的具体实现 1.2 所谓"高层"组件,是由其他低层组件定义其行为的类 2. 不管高层组件还是低层组件,都应该依赖抽象 |
| 最少知识原则(墨忒耳法则) | 只和你的密友谈话 |
| 好莱坞原则 |
别调用(打电话给)我们,我们会调用(打电话给)你 将决策权放在高层模块中,以便决定如何以及何时调用低层模块。 |
| 单一原则 | 一个类应该只有一个引起变化的原因 |
OO模式
模式不是代码,而是针对设计问题的通用解决方法。
模式是在某情境下,针对某问题的某种解决方案。
模式是工具而不是规则,需要被适当第调整以符合你的需求。
| 模式 | 描述 |
| 装饰者 | 包装一个对象,以提供新的行为。不改变接口,但加入责任 |
| 状态 | 封装基于状态的行为,并使用委托在行为之间切换 |
| 迭代器 | 在对象的集合之中游走,而不暴露集合的实现 |
| 外观 | 提供子系统的一个简化接口,简化一群类的接口 |
| 策略 | 使用组合封装算法。封装可互换的行为,然后使用委托来决定要采用哪一个行为 |
| 代理 | 包装对象,以控制对此对象的访问 |
| 工厂方法 | 由子类决定实例化哪个具体类。 |
| 适配器 | 封装对象,将一个接口转换成另一个接口 |
| 观察者 | 当某个状态改变时,允许一群对象能被通知到 |
| 模板方法 | 使用继承封装算法。子类决定如何实现算法中的步骤 |
| 单件 | 确保有且只有一个对象被创建 |
| 组合 | 客户用一致的方式处理对象集合和单个对象 |
| 抽象工厂 | 允许客户创建对象的家族,而无需指定他们的具体类。 |
| 命令 | 封装请求成为对象 |
模式可以按照下面的来分类
| 类别 | 描述 | 模式 |
| 创建型模式 | 创建型模式涉及到将对象实例化,这类模式都提供一个方法,将客户从所需要实例化的对象中解耦。 |
Builder Prototype 工厂模式 简单工厂模式 |
| 行为型模式 | 只要是行为型模式,都涉及类和对象如何交互及分配责任。该模式的目的是对象之间的沟通与互联。 |
Visitor Mediator Memento Interpreter Chain of Responsibility |
| 结构型模式 | 结构型模式可以让你把类和对象组合到更大的结构中。用来描述类和对象如何被组合以建立新的结构或新的功能。 |
Bridge Flyweight |
同样,也可以按照下面的方式来分
| 类别 | 描述 | 模式 |
| 类模式 | 描述类之间的关系如何通过继承定义。类模式的关系是在编译时建立的。 |
Interpreter |
| 对象模式 | 描述对象之间的关系,而且主要是利用组合定义。对象模式的关系通常在运行时建立,而且更加动态、更具有弹性。 |
Bridge Flyweight Visitor Memento Chain of Responsibility Mediator Prototype Builder |
类图
策略模式

抽象工厂模式

代理模式

迭代器模式

工厂方法模式

观察者模式

简单工厂模式

命令模式

模板方法

适配器模式

外观模式

装饰者模式

状态模式

组合模式

[读书笔记] Head First 设计模式的更多相关文章
- 读书笔记之 - javascript 设计模式 - 接口、封装和链式调用
javascript 采用设计模式主要有下面的三方面原因: 可维护性:设计模式有助于降低模块之间的耦合程度.这使代码进行重构和换用不同的模块变得容易,也使程序员在大型项目中合作变得容易. 沟通:设计模 ...
- 读书笔记--Head First 设计模式 目录
1.设计模式入门 2.观察者模式 3.装饰者模式 4.工厂模式 5.单件模式 6.命令模式 7.适配器模式与外观模式 8.模板方法模式 9.迭代器与组合模式 10.状态模式 11.代理模式 12.复合 ...
- 读书笔记之 - javascript 设计模式 - 工厂模式
一个类或者对象中,往往会包含别的对象.在创建这种对象的时候,你可能习惯于使用常规方式,即用 new 关键字和类构造函数. 这会导致相关的俩个类之间产生依赖. 工厂模式,就是消除这俩个类之间的依赖性的一 ...
- 读书笔记之 - javascript 设计模式 - 责任链模式
责任链模式可以用来消除请求的发送者和接收者之间的耦合.这是通过实现一个由隐式地对请求进行处理的对象组成的链而做到的.链中的每个对象可以处理请求,也可以将其传给下一个对象. 责任链的结构: 责任链由多个 ...
- 读书笔记之 - javascript 设计模式 - 命令模式
本章研究的是一种封装方法调用的方式.命令模式与普通函数有所不同.它可以用来对方法调用进行参数化处理和传送,经过这样处理过的方法调用可以在任何需要的时候执行. 它也可以用来消除调用操作的对象和实现操作的 ...
- 读书笔记之 - javascript 设计模式 - 观察者模式
在事件驱动的环境中,比如浏览器这种持续寻求用户关注的环境中,观察者模式是一种管理人与其任务(确切的讲,是对象及其行为和状态之间的关系)之间的关系的得力工具.用javascript的话来讲,这种模式的实 ...
- 读书笔记之 - javascript 设计模式 - 代理模式
代理(proxy)是一个对象,它可以用来控制对另一对象的访问.它与另外那个对象实现了同样的接口,并且会把任何方法调用传递给那个对象.另外那个对象通常称为本体.代理可以代替本体被实例化,并使其可被远程访 ...
- 读书笔记之 - javascript 设计模式 - 享元模式
本章探讨另一种优化模式-享元模式,它最适合于解决因创建大量类似对象而累及性能的问题.这种模式在javascript中尤其有用,因为复杂的javascript代码很快就会用光浏览器的所有可用内存,通过把 ...
- 读书笔记之 - javascript 设计模式 - 装饰者模式
本章讨论的是一种为对象增添特性的技术,它并不使用创建新子类这种手段. 装饰者模式可以透明地把对象包装在具有同样接口的另一对象之中,这样一来,你可以给一些方法添加一些行为,然后将方法调用传递给原始对象. ...
随机推荐
- call、apply、bind的区别
me.setname.call(me,"dpd","dpd12"); 通过call执行say方法 ,第一个参数为作用对象,后边的一些列参数作为实参传入 ...
- 【转载】async & await 的前世今生(Updated)
async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...
- 【转载】Lucene.Net无障碍学习和使用:搜索篇
在上一篇中,我们初步理解了索引的增删改查基本操作.本文着重介绍一下常用的搜索,以及搜索结果的排序和分页.本文的搜索主要是基于前一篇介绍的文本文件的索引,建议下载最后改进的demo对照着看阅读本文,同时 ...
- 【SQL】CLR聚合函数什么鬼
之前写过一个合并字符串的CLR聚合函数,基本是照抄MS的示例,外加了一些处理,已经投入使用很长时间,没什么问题也就没怎么研究,近日想改造一下,遇到一些问题,遂捣鼓一番,有些心得,记录如下. 一.杂项 ...
- Python 3 利用 subprocess 实现管道( pipe )交互操作读/写通信
这里我们用Windows下的shell来举例: from subprocess import * #因为是举例,就全部导入了 为了方便你理解,我们用一个很简单的一段代码来说明: 可以看见我们利用Pop ...
- ThinkCMF-上传多个图片源码解读
关键函数: /** * 多图上传 * @param dialog_title 上传对话框标题 * @param container_selector 图片容器 * @param item_tpl_wr ...
- Linux命令详解之—more命令
Linux more命令同cat命令一样,多用来查看文件内容,本文就为大家介绍下Linux more命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux的more命令类似 ca ...
- 代理模式的java实现
1. 简介 代理模式(Proxy Pattern)是常用设计模式之一.代理模式的定义:Provide a surrogate or placeholder for another object to ...
- Hibernate(三)__核心接口和类
该图显示了核心接口类以及配置文件的关系层次,越往下越偏向底层数据库. 1. hibernate.cfg.xml文件 ①该文件主要用于指定各个参数,是hibernate核心文件 ②默认放在src目录下, ...
- Python multi-thread 多线程 print 如何避免print的结果混乱
multithread如何写 这是我第一次写multithread,所以就是照着例子学,下面是我用来学的例子 来自于”Automate the boring stuff with Python”的15 ...