OO基础

  • 抽象
  • 封装
  • 多态
  • 继承

OO原则

原则 描述
封装变化

找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混合在一起。

把会变化的部分取出来并“封装”起来,好让其他部分不受到影响。

多用组合,少用继承

使用组合建立系统具有很大的弹性,不仅可以将“算法族”封装成类,更可以“在运行时动态地改变行为”,只要组合的行为对象符合正确的接口标准即可。

利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。

针对接口编程,不针对实现编程 针对接口编程,真正的意思是针对“超类型”编程,关键就在多态。
为交互对象之间的松耦合设计而努力  
类应该对外扩展开放,对修改关闭  
依赖倒置原则

要依赖抽象,不要依赖具体类。

该原则相对于“针对接口编程,不针对实现编程”来说,更加强调“抽象”。

该原则说明:

  1. 不能让高层组件依赖低层组件

    1.1 当你直接实例化一个对象时,就是在依赖它的具体实现

    1.2 所谓"高层"组件,是由其他低层组件定义其行为的类

  2. 不管高层组件还是低层组件,都应该依赖抽象

最少知识原则(墨忒耳法则) 只和你的密友谈话
好莱坞原则

别调用(打电话给)我们,我们会调用(打电话给)你

将决策权放在高层模块中,以便决定如何以及何时调用低层模块。

单一原则 一个类应该只有一个引起变化的原因

OO模式

模式不是代码,而是针对设计问题的通用解决方法。

模式是在某情境下,针对某问题的某种解决方案。

模式是工具而不是规则,需要被适当第调整以符合你的需求。

模式 描述
装饰者 包装一个对象,以提供新的行为。不改变接口,但加入责任
状态 封装基于状态的行为,并使用委托在行为之间切换
迭代器 在对象的集合之中游走,而不暴露集合的实现
外观 提供子系统的一个简化接口,简化一群类的接口
策略 使用组合封装算法。封装可互换的行为,然后使用委托来决定要采用哪一个行为
代理 包装对象,以控制对此对象的访问
工厂方法 由子类决定实例化哪个具体类。
适配器 封装对象,将一个接口转换成另一个接口
观察者 当某个状态改变时,允许一群对象能被通知到
模板方法 使用继承封装算法。子类决定如何实现算法中的步骤
单件 确保有且只有一个对象被创建
组合 客户用一致的方式处理对象集合和单个对象
抽象工厂 允许客户创建对象的家族,而无需指定他们的具体类。
命令 封装请求成为对象

模式可以按照下面的来分类

类别 描述 模式
创建型模式 创建型模式涉及到将对象实例化,这类模式都提供一个方法,将客户从所需要实例化的对象中解耦。

Builder

Prototype

单件模式(Singleton)

工厂模式

  简单工厂模式

  工厂方法模式(Factory Method)

  抽象工厂模式(Abstract Factory)

行为型模式 只要是行为型模式,都涉及类和对象如何交互及分配责任。该模式的目的是对象之间的沟通与互联。

Visitor

Mediator

Memento

Interpreter

Chain of Responsibility

模板方法(Template Method)

命令模式(Command)

策略模式(Strategy)

状态模式(State)

观察者模式(Observer)

迭代器模式(Iterator)

结构型模式 结构型模式可以让你把类和对象组合到更大的结构中。用来描述类和对象如何被组合以建立新的结构或新的功能。

Bridge

Flyweight

装饰者模式(Decorator)

适配器模式(Adapter)

外观模式(Facade)

组合模式(Composite)

代理模式(Proxy)

同样,也可以按照下面的方式来分

类别 描述 模式
类模式 描述类之间的关系如何通过继承定义。类模式的关系是在编译时建立的。

模板方法(Template Method)

工厂方法模式(Factory Method)

适配器模式(Adapter)

Interpreter

对象模式 描述对象之间的关系,而且主要是利用组合定义。对象模式的关系通常在运行时建立,而且更加动态、更具有弹性。

组合模式(Composite)

装饰者模式(Decorator)

代理模式(Proxy)

策略模式(Strategy)

Bridge

Flyweight

抽象工厂模式(Abstract Factory)

单件模式(Singleton)

Visitor

迭代器模式(Iterator)

命令模式(Command)

外观模式(Facade)

Memento

观察者模式(Observer)

Chain of Responsibility

Mediator

Prototype

状态模式(State)

Builder

类图

策略模式

抽象工厂模式

代理模式

迭代器模式

工厂方法模式

观察者模式

简单工厂模式

命令模式

模板方法

适配器模式

外观模式

装饰者模式

状态模式

组合模式

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

  1. 读书笔记之 - javascript 设计模式 - 接口、封装和链式调用

    javascript 采用设计模式主要有下面的三方面原因: 可维护性:设计模式有助于降低模块之间的耦合程度.这使代码进行重构和换用不同的模块变得容易,也使程序员在大型项目中合作变得容易. 沟通:设计模 ...

  2. 读书笔记--Head First 设计模式 目录

    1.设计模式入门 2.观察者模式 3.装饰者模式 4.工厂模式 5.单件模式 6.命令模式 7.适配器模式与外观模式 8.模板方法模式 9.迭代器与组合模式 10.状态模式 11.代理模式 12.复合 ...

  3. 读书笔记之 - javascript 设计模式 - 工厂模式

    一个类或者对象中,往往会包含别的对象.在创建这种对象的时候,你可能习惯于使用常规方式,即用 new 关键字和类构造函数. 这会导致相关的俩个类之间产生依赖. 工厂模式,就是消除这俩个类之间的依赖性的一 ...

  4. 读书笔记之 - javascript 设计模式 - 责任链模式

    责任链模式可以用来消除请求的发送者和接收者之间的耦合.这是通过实现一个由隐式地对请求进行处理的对象组成的链而做到的.链中的每个对象可以处理请求,也可以将其传给下一个对象. 责任链的结构: 责任链由多个 ...

  5. 读书笔记之 - javascript 设计模式 - 命令模式

    本章研究的是一种封装方法调用的方式.命令模式与普通函数有所不同.它可以用来对方法调用进行参数化处理和传送,经过这样处理过的方法调用可以在任何需要的时候执行. 它也可以用来消除调用操作的对象和实现操作的 ...

  6. 读书笔记之 - javascript 设计模式 - 观察者模式

    在事件驱动的环境中,比如浏览器这种持续寻求用户关注的环境中,观察者模式是一种管理人与其任务(确切的讲,是对象及其行为和状态之间的关系)之间的关系的得力工具.用javascript的话来讲,这种模式的实 ...

  7. 读书笔记之 - javascript 设计模式 - 代理模式

    代理(proxy)是一个对象,它可以用来控制对另一对象的访问.它与另外那个对象实现了同样的接口,并且会把任何方法调用传递给那个对象.另外那个对象通常称为本体.代理可以代替本体被实例化,并使其可被远程访 ...

  8. 读书笔记之 - javascript 设计模式 - 享元模式

    本章探讨另一种优化模式-享元模式,它最适合于解决因创建大量类似对象而累及性能的问题.这种模式在javascript中尤其有用,因为复杂的javascript代码很快就会用光浏览器的所有可用内存,通过把 ...

  9. 读书笔记之 - javascript 设计模式 - 装饰者模式

    本章讨论的是一种为对象增添特性的技术,它并不使用创建新子类这种手段. 装饰者模式可以透明地把对象包装在具有同样接口的另一对象之中,这样一来,你可以给一些方法添加一些行为,然后将方法调用传递给原始对象. ...

随机推荐

  1. .NET Framework介绍

    .NET Framework 是一个集成在 Windows 中的组件,它支持生成和运行下一代应用程序与 XML Web Services. .NET Framework 旨在实现下列目标: 提供一个一 ...

  2. Linux下的C编程实战

    Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来, Linu ...

  3. spring笔记3 spring MVC的基础知识3

    4,spring MVC的视图 Controller得到模型数据之后,通过视图解析器生成视图,渲染发送给用户,用户就看到了结果. 视图:view接口,来个源码查看:它由视图解析器实例化,是无状态的,所 ...

  4. 非常不错的Navigation Bar效果

    非常不错的Navigation Bar效果,该源码转载于源码天堂的,大家可以了解一下吧,多视图应用程序中,我们常常使用到自定义UINavigationBar来完成导航条的设置. 源码我就不上传了,大家 ...

  5. Netbeans 8.2将支持PHP 7

    首先,将PHP项目的PHP版本设置为PHP 7.0. PHP 7其中一项新特性是返回类型声明,即PHP的函数和方法可以声明指定类型的返回值: PHP 7的另一项精彩的改进就是参数的标量类型声明,Net ...

  6. Python语言and-or的用法

    [原]python语言的 and-or 常常被用来实现类C语言中的三元运算符 : ?   , 更为骚气的写法是  xxx and xxx or xxx and xxx or xxx,这样就可以可以做到 ...

  7. SQL join中on与where区别

    本文导读: 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户.例如在使用left jion时,on条件是在生成临时表时使用的条件,它不管on中的条件是否 ...

  8. IOS 调用WebService(同步和异步)

    因为公司的服务全都是webservice,每次总要花费大量时间在调试服务上面,干脆就写了一个解析wsdl的项目,希望将来能用上吧.还未经过烘焙,有问题,还请高手点播点播. 下面,我拿天气服务的wsdl ...

  9. Quartz.NET开源作业调度框架系列(二):CronTrigger

    CronTriggers比SimpleTrigger更加的灵活和有用,对于比较复杂的任务触发规则,例如"每个星期天的晚上12:00"进行备份任务,SimpleTrigger就不能胜 ...

  10. MySQL索引类型 btree索引和hash索引的区别

    来源一 Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 ...