《Head First 设计模式》整理

原创 2015年04月11日 00:56:51

《Head First 设计模式》中的常用设计模式的整理,其实很多模式我们在开发中都有用到,但是在此之前没有一种理论基础支撑自己,有了这些知识后,更有利于做好程序的设计工作,以及遇到一些设计问题时知道如何取舍。


策略模式

作用

通过组合不同的算法,为系统提供运行时动态地改变行为的功能,使系统具有更大的弹性。

定义

定义了算法族,把它们分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户之上。

类图结构

这里写图片描述


观察者模式

作用

通过使用观察者模式,使多个对象之间松耦合,但是它们依然可以交互,但是不用清楚彼此的细节。

定义

定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

类图结构

这里写图片描述


装饰器模式

作用

装饰者可以在被装饰者的行为前面或后面加上自己的行为,甚至将被装饰者的行为整个取代掉,从而达到某种特定的目的。

定义

动态地将责任附加到对象上。若要拓展功能,装饰者提供了比继承更有弹性的替代方案。

类图结构

这里写图片描述


工厂方法模式

作用

通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。

定义

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

类图结构

这里写图片描述


抽象工厂模式

作用

抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道(或关心)实际产出的具体产品是什么,这样一来,客户就从具体的产品中被解耦。

定义

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

类图结构

这里写图片描述


工厂方法与抽象工厂的区别

坦白说,工厂方法与抽象工厂的相似度很高,从类图上看很难将它们理清楚,但是从定义上来看的话会发现它们的区别主要是在设计层次上,以我们大家熟悉的电子产品为例,如果有两个产品:手机、电脑,用工厂方法表示苹果和三星的类图:
这里写图片描述
从品牌的角度上来看,两家厂商生产不同的手机和电脑,这样的工厂方法很清晰;但是如果我们把生产条件做的更细致一点的话,比如苹果面向中国的产品和面向美国的产品是不同的,面向中国大陆销售的产品是阉割过的,而美国的是全功能的,用抽象工厂表示就像这样:
这里写图片描述
抽象工厂的每一个子类都像是一个工厂方法,就像抽象工厂的定义所说的那样:用于创建相关或依赖对象的家族。


单件模式

作用

创建一个独一无二的对象。

定义

确保一个类只有一个实例,并提供一个全局访问点。

类图结构

这里写图片描述


命令模式

作用

通过统一的接口操作不同的对象,使系统能够轻易的实现多种目的。

定义

将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

类图结构

这里写图片描述


适配器模式

作用

适配器可以将改变的接口封装起来,客户就不必为了应对不同的接口而每次跟着修改。

定义

将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

类图结构

这里写图片描述


外观模式

作用

将一个或数个类的复杂的一切都隐藏在背后,只显露出一个干净美好的外观。

定义

提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

类图结构

这里写图片描述


模板方法模式

作用

将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,同时由子类提供部分实现。

定义

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

类图结构

这里写图片描述


迭代器模式

作用

让我们能游走于集合中的每一个元素,而又不暴露其内部的表示。

定义

提供一种方法顺序访问一个集合对象中的各个元素,而又不暴露其内部的表示。

类图结构

这里写图片描述


组合模式

作用

能够创建一个树形结构,在同一个结构中处理嵌套菜单和菜单项组。

定义

允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。

类图结构

这里写图片描述


状态模式

作用

将状态封装成独立的类,并将动作委托到代表当前状态的对象,使行为随着内部状态而改变。

定义

允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

类图结构

这里写图片描述


代理模式

作用

让代理对象控制对某个对象的访问,被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。

定义

为另一个对象提供一个替身或占位符以控制对这个对象的访问。

类图结构

这里写图片描述
代理是个复杂的模式,变种颇多,不同的变种甚至就有不同的类图。


OO设计原则:

  1. 封装变化
  2. 多用组合,少用继承
  3. 针对接口编程,不针对实现编程
  4. 为交互对象之间的松耦合设计而努力
  5. 类应该对拓展开放,对修改关闭
  6. 依赖抽象,不要依赖具体类
  7. 只和朋友交谈
  8. 别找我,我会找你
  9. 类应该只有一个改变的理由
版权声明:如需转载,请注明出处,谢谢!

书籍:wpf学习书籍介绍

WPF参考书推荐          下面先整理下,本人主要学习的WPF参考书:          1、WPF编程宝典(C#2010)                   该书:(必读)      ...

【分享】深入浅出WPF全系列教程及源代码

本人10月份提出离职,但是交接很慢,估计年底才会交接完,趁着交接之际,自学了一下WPF,因为这是微软未来的发展趋势,自WIN7以来包括前不久发布的WIN8,核心还是WPF,在此,将自己的学习成果做一个...

Head first 设计模式 整理

面向对象基础:抽象 封装 多态 继承 良好的面向对象设计:可复用 可扩充 可维护 设计模式是历经验证的设计经验   设计原则 找出应用中可能需要变化之处,把它们独立出来,...

Head First设计模式整理

最近看了head first的设计模式颇有心得,赶紧趁热整理下,便于以后观看。 运用设计模式的最基本的思想其实是眼光,因为设计模式的使用并不能帮助你简化该功能的实现,相反经常会让这个功能的实现变得更复...

设计模式_策略模式_HEAD_FIRST整理

先来说说策略模式的定义:定义了算法族,分别封装起来让他们可以相互替换,此模式让算法的变化独立于使用算法的客户。 没用设计模式之前的例子 : 所有的鸭子类都是继承 Duck 类,所有鸭...

Head First Design Pattern《深入浅出设计模式》读书笔记

Chapter 01 Intro to Design Patterns 第01章 设计模式入门   1. Design Principle Identify the aspects of you...
  • cs_cjl
  • cs_cjl
  • 2013年04月28日 01:06
  • 1437

一句话理解设计模式 - 《Head First》读后感

《Head First》这本书是我觉得理解设计模式最棒的书本。至于其神奇之处,我想看过此书的人都会跟我一样的感慨! 面向对象基础 1、抽象 2、封装 3、继承 4、多态 设...
  • chiuan
  • chiuan
  • 2013年02月19日 18:40
  • 2840

调侃《Head First设计模式》之总结篇

调侃《Head First设计模式》之总结篇 发表于2015/6/27 9:38:51  496人阅读 分类: 设计模式 java          在之前的设计模式博客中,主要...

《Head First设计模式》读后感

设计原则:1. 封装变化。注释:a. 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。      b. 把会变化的部分取出并封装起来,一边以后可以轻易地改动或扩充此部分...

Head First 设计模式(一)

设计原则: 一、把会变化的部分取出并封装起来 二、针对接口编程,而不是针对实现编程。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《Head First 设计模式》整理
举报原因:
原因补充:

(最多只允许输入30个字)