推荐书籍 《人人都懂设计模式》从生活中领悟设计模式 python实现  罗伟富著

介绍有趣的设计模式,便于代码设计。

监听模式,又名观察者模式。顾名思义就是观察与被观察的关系。比如,在烧开水的时候看它开没有开。你就是观察者,水就是被观察者。其核心思想: 被观察者与观察者之间建立一种自动触发关系。观察者模式是对象的行为模式,又叫发布/订阅模式、模型/视图模式、源/监听器模式或者是从属者模式。

设计要点:(1) 要明确谁是观察者谁是被观察者。观察者与被观察者之间是多对一关系。(2)Observable在发送广播通知的时候,无需指定具体的Observer。Observer可以自己决定是否订阅Subject的通知。(3)被观察者至少需要三个方法:添加监听者、移除监听者、通知Observer的方法。观察者至少要有一个方法:更新方法,即更新当前的内容,做出相应的处理。

状态模式。一个对象在其内部状态发生改变时,其表现的行为和外在属性不一样,这个对象看上去就像改变了它的类型一样。核心思想:一个事物(对象)有多种状态,在不同的状态下所表现出来的行为和属性不一样

设计要点:(1) 在实现状态模式的时候,实现的场景状态有时候会非常复杂,决定状态变化的因素也非常多。我们可以把决定状态变化的属性单独抽象成一个类StateInfo,这样判断状态属性是否符合当前的状态isMatch时就可以传入更多的信息。

中介模式。用一个中介对象来封装一系列的对象交互,中介对象使各对象不需要显式地像话引用,从而使爱耦合松散,而且可以独立改变它们之间的交互。

设计要点:(1) 交互对象:要进行交互的一系列对象。(2)中介者:负责协调各个对象之间的交互。(3)具体中介者:中介的具体实现。

装饰模式。动态地给一个对象增加一些额外的职责,就拓展对象功能来说,装饰模式比生成子类的方式更为灵活。

设计要点:(1) 可灵活地给一个对象增加职责或拓展功能。(2)可增加任意多个装饰。(3)装饰的顺序不同,可能产生不同的效果。

工厂模式。简单工厂模式:专门定义一个类来负责创建其他类的实例,根据参数的不同创建不同类的实例,被创建的实例通常具体共同的父类,这个模式叫简单工厂模式。实现简单,结构清晰。抽象出一个专门的类来负责某类对象的创建,分割出创建的职责。不能直接创建具体的对象,只需闯入适当的参数即可。工厂方法模式:抽象出一个父类,并增加子类分别负责创建不同的具体产品。抽象工厂模式:提供一个创建一系列相关或相互依赖的对象的接口,而无需指定它们的具体类。

单例模式。保证一个类有且只有一个对象(实例)的一种机制。单例模式用来控制某些事物只允许有一个个体。类中只有一个方法。

克隆模式。用原型实例指定要创建对象的种类,并通过拷贝这些原型的属性来创建新的对象。核心就是clone方法,拷贝副本的所有属性。(1) 分配一块新的内存空间给新的对象。(2)拷贝父本对象的所有属性。

设计要点:区分浅拷贝与深拷贝,除非一些特殊情况(如需求本身就要求两个对象一起改变),尽量使用深拷贝的方式,只有两个方法:深拷贝克隆deepClone和浅拷贝克隆Clone。

职责模式。职责模式也成为责任链模式,它将请求的发送者和接受者解耦了。客户端不需要知道请求处理者的明确信息和处理的具体逻辑,甚至不需要知道链的结构,它只需要将请求进行发送即可。

设计要点:(1)请求者与请求内容:确认谁要发送请求,发送请求的对象称为请求者。请求的内容通过发送请求时的参数进行传递。(2)有哪些责任人:责任人是构成责任链的关键要素。请求的流动方向是链条上的线,而责任人则是链条上的节点,线和节点共同构成一条链条。(3)对责任人进行抽象:真实世界上的责任人多种多样,纷繁复杂,有不同的职责和功能;但他们也有一个共同的特征---都可以处理请求。所以需要对责任人进行抽象,使他们具有责任的可传递性。(4)责任人可以自由组合:责任链上的责任人可以根据业务的具体逻辑进行自由的组合和排序。

代理模式。为其他对象提供一种代理以控制对这个对象的访问。代理模式的核心思想是:(1)使用一个额外的间接层来支持分散、可控的、智能的访问。(2)增加一个包装盒委托来宝华真实的组件,以避免过度复杂。

设计要点:(1)主题:定义操作、活动、任务的接口类 (2)真实主体:真正完成操作、活动、任务的具体类。(3)代替真实主题完成操作、活动、任务的代理类。

外观模式。将复杂的业务通过一个对接人来提供一整套统一的服务,让用户不用关心内部复杂的运行机制。这种方式在程序中叫外观模式,也叫门面模式。用一个简单的接口来封装一个复杂的系统,使这个系统更容易使用。

设计要点:(1)外观角色:为子系统封装统一的对外接口,如同子系统的门面。这个类一般不浮躁具体的业务逻辑,知识一个委托类。 (2)子系统:由多个类组成的具有某一特定功能的子系统。可以是第三方库,也可以是自己的基础库,还可以是一个子服务,为整个系统提供特点的功能或服务。

迭代模式,也称为迭代器模式。

设计要点:(1)了解容器的数据机构及可能的层次结构。 (2)根据需要确定迭代器要实现的功能,如next()、current()等。

组合模式。 使得用户对单个对象和组合对象的使用具有一致性设计要点:(1)理清部分与整体的关系,了解对象的组成结构。 (2)组合模式是一种具有层次关系的树形结构,不能再分的叶子节点是具体的组件,也就是最小的逻辑单元;具有子节点(由多个子组件组成)的组件称为复合组件,也就是组合对象。

构建模式。  把各种部件通过一定的方式和流程构造一个成品的过程。核心思想:将产品的创建过程与产品本身分离开来,使得创建过程更加清晰,能够更加精确地控制复杂对象的创建过程,让使用者可以用相同的创建过程创建不同的产品。

适配模式。 将一个类的接口变成客户端所期望的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够在一起工作。设计要点:(1)目标:即你期望的目标接口,要转换成的接口。 (2)源对象:即要被转换的角色,要把谁转换为目标角色。(3)适配模式的核心角色,负责把源对象转换和包装成目标对象。

策略模式。定义一系列算法,将每个算法都封装起来,并且使它们之间可以相互替换。策略模式使算法可以独立于使用它的用户而变化。设计要点:(1)上下文环境:起着承上启下的封装作用,屏蔽上层应用对策略(算法)的直接访问,封装可能存在的变化。(2)策略的抽象:策略(算法)的抽象类,定义统一的接口,规定每个子类必须实现的方法。(3)具备的策略:策略的具体实现者,可以有多个不同的(算法或规则)实现。

命令模式。将具体的命令与对应的接收者相关联(捆绑),使得调用方不用关心具体的行动执行者及如何执行,只要发送正确的命令,就能准确无误地完成相应的任务。设计要点:(1)命令:要完成的任务,或要执行的动作,这是命令模式的核心角色。(2)接收者:任务的具体实施方,或行动的真实执行者。(3)调度者:接受任务并发送命令,对接用户的需求并执行内部的命令,负责外部用户与内部命令的交互。(4)用户:命令的使用者,即真正的用户。

备忘模式。可以保存对象的一个状态作为备份,这样便可让对象在将来的某一时刻恢复到之前保存的状态。设计要点:(1)发起人:需要进行备份的对象。(2)备忘录:备份的状态,即一个备份的存档。(3)备忘录管理者:备份存档的管理者,由它附着物与发起人的交互。

享元模式。运用共享技术有效地支持大量细粒度对象的复用。设计要点:(1)享元对象,期望用来共享的对象。享元对象必须是轻量级对象,也就是细粒度对象。(2)享元工厂 该模式的核心角色,负责创建和管理享元对象。

访问模式。封装一些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。设计要点:(1)访问者:负责对数据节点进行访问和操作。(2)数据节点:即要被操作的数据对象。(3)对象结构:数据结构的管理类,也是数据对象的一个容器,可遍历容器内所有的元素。

人人都懂设计模式--Everybody Know Design Patterns : How to comprehend Design Patterns from daily life相关推荐

  1. 设计模式整理(人人都懂设计模式)

    1.监听模式 设计要点: (1) 要明确谁是观察者谁是被观察者.一般观察者与被观察者之间是多对一的关系,一个被被观察者对象可以有多个监听对象.如一个编辑框,有鼠标点击的监听者,也有键盘的监听者,还有内 ...

  2. 《人人都懂的宏观经济》笔记

    <人人都懂的宏观经济>笔记 前言 大三的时候在网易云课堂接触到理财,于是搜集了不少相关课程看.这个<人人都懂的宏观经济>还不错. 文章目录 <人人都懂的宏观经济>笔 ...

  3. 《转》从程序员到项目经理(五):不是人人都懂的学习要点

    转载自http://www.cnblogs.com/watsonyin/archive/2012/10/22/2734741.html 学习是一种基础性的能力.然而,"吾生也有涯,而知也无涯 ...

  4. 从程序员到项目经理(五):程序员加油站 -- 不是人人都懂的学习要点

    学习是一种基础性的能力.然而,"吾生也有涯,而知也无涯.",如果学习不注意方法,则会"以有涯随无涯,殆矣". 一.学习也是一种能力 看到这个标题,有人会说:&q ...

  5. 从程序员到项目经理(5):程序员加油站 -- 不是人人都懂的学习要点

    学习是一种基础性的能力.然而,"吾生也有涯,而知也无涯.",如果学习不注意方法,则会"以有涯随无涯,殆矣". 一.学习也是一种能力 看到这个标题,有人会说:&q ...

  6. 程序员加油站,不是人人都懂的学习要点

    原文地址:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=210257&reltid=209928&pre_thr ...

  7. 从程序员到项目经理(5):程序员加油站 -- 不是人人都懂的学习要点--------转自西西吹雪...

    学习是一种基础性的能力.然而,"吾生也有涯,而知也无涯.",如果学习不注意方法,则会"以有涯随无涯,殆矣". 一.学习也是一种能力 看到这个标题,有人会说:&q ...

  8. 从程序员到项目经理(5):程序员加油站,不是人人都懂的学习要点

    转自:http://blog.jobbole.com/29411/ 学习是一种基础性的能力.然而,"吾生也有涯,而知也无涯.",如果学习不注意方法,则会"以有涯随无涯,殆 ...

  9. 从程序员到项目经理(4):程序员加油站 -- 不是人人都懂的学习要点

    学习是一种基础性的能力.然而,"吾生也有涯,而知也无涯.",如果学习不注意方法,则会"以有涯随无涯,殆矣". 一.学习也是一种能力 看到这个标题,有人会说:&q ...

最新文章

  1. 6名学生返校后被判定为密接,高校紧急通知!
  2. 如何阅读苹果开发文档
  3. 移动三国己然鼎立,普​通开发者如何选择开发​平台?
  4. [转]ExecuteNonQuery()、ExecuteReader()、ExecuteScalar()的简单说明
  5. Python趣味编程---Python也会讲笑话
  6. 基于sqlite数据库的C语言编程
  7. Spring复杂类型数据依赖注入
  8. 用js内置对象XMLHttpRequest 来用ajax
  9. 设置tomcat内存
  10. 不存在_别傻了,根本就不存在缘分天定
  11. abb变频器580系列改中文_ABB变频器ACS580系列
  12. Android 10.0修改系统型号(Build.MODEL)
  13. 软件生命周期是指什么?
  14. ENVI5.3+PolSARpro5.0环境下高分三号双极化数据预处理及地理编码
  15. 加仓减仓口诀_加仓减仓口诀
  16. 《Two-Archive Evolutionary Algorithm for Constrained Multiobjective Optimization》阅读笔记
  17. docker logs 说明
  18. Camera和Image sensor技术基础笔记(1) -- 光和CCD/CMOS sensor基础知识
  19. IC | 关于传输线的反射原理的详细解析
  20. 我怕有一天,也不相信爱情

热门文章

  1. The harder I work, the luckier I get. - Samuel Goldwyn
  2. 分享网页微信防撤回插件
  3. Python 基础 函数的使用——参数
  4. pythonstdin_Windows上Python读取stdin出错
  5. 经典图书介绍:广义相对论--1972讲稿
  6. 【随笔记】做事要讲究轻重缓急,一定要把握主次轻重。
  7. sql查询结果 替换
  8. [分享]SQl语句学习专题
  9. U盘插入电脑提示请将磁盘插入“可移动磁盘”解决办法
  10. Python学习笔记-北京图灵学院-变量-20200528