设计模式学习(第十一章到第二十章)

第十一章 迪米特法则

  • 定义:如果两个类 不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果如果一个类需要调用另一个类的方法时,可以通过第三者转发调用。

第十二章 外观模式

  • 定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层的接口,这个接口使得这一子系统更加容易使用。

  • 结构图:


    image.png

例子:
定义一个股票系统,系统下有四只股票的类,股票类可以买股票和卖股票。股票系统有两个方法,一个是卖全部股票,一个买全部股票。这样你在客户端时只需要使用这个股票系统的两个方法就能得到你的结果。这样客户端和这个四支股票的相关性的降低了,四支股票的实现是就分别实现,我们根据这个股票系统的接口就可以直接使用股票的买卖。

优点&缺点&应用

  1. 满足依赖倒转的原则,迪米特原则。
    2.对于一个老系统的维护,老系统已经比较难维护,设计粗糙或高度复杂,功能不易拆分,我们可以成立两个开发小组,一个建立一个facade的接口,用与老系统的交互,建立一个新的比较清晰与简单的接口。另一个小组在此接口的基础上增加新的功能。

第十三章 建造者模式

  • 定义:将一个复杂对象的构建与他的表示分离,使得同样的构建可以创建不同的表示。

结构图:


image.png

白话理解:有点类似于工厂模式,在具体哦的Builder中写好如何构建对象的逻辑(使用不同组件进行组装,例如没有组件就不通过),则这个BuilderA专门构建这个参数产品的工厂。然后使用的Director进行调用。这样一来就会得到一个通过严肃过程的对象,好处是部分的组装逻辑与部分的定义解耦。

应用场景

用于:当创建复杂对象的算法应该独立于与该对象的组成成分以及他们他们装配方式的场景下。

第十四章 观察者模式

  • 定义: 定义了一种一对多的依赖关系,让对个观察者对象同时监听某一个主题对象。这个主题对象发生变化时,会通知所有观察者对象,使他们自己更新自己。

机构图:


结构图

应用场景

  1. 对于一个系统的分割成一系列相互协作的类会产生一个问题,那就是维护相关对象的一致性。类相互在自己的类中写上与其他类的参数传递的话,这样违反封闭开发原则,并且每增加一个相关类都会引起维护。
  2. 放一个对象改变需要同时改变其他对象的时候
  3. 我们不知道有多少对象要改变的时候
  • 优点
    观察者模式的工作是解除耦合,让耦合双方都依赖与抽象,而不是依赖于具体,从而使得各自变化都不会影响另一边需要功能修改。
  • 缺点
    不是所有的通知后调用的方法名字都叫Update,可能是display啥的,所以对于有委托机制的语言可以做到弥补这个缺点,向Java没有此机制,可以使用反射机制实现委托机制。

第十五章 抽象工厂模式

  • 定义:提供一个创建一系列相关或者相互依赖的对象的接口,无需指定他们具体的类。

状态图:


image.png
  • 优点:
  1. 对于要实例化的工厂,代码中出现一次,因此,我们改变实例化的另一个工厂也非常简单。
  2. 客户端的操作都是基于接口的,有利于对客户端与具体类的解耦。
  • 缺点
    对于这个图,每创建有一个产品,需要增加一个接口,两个具体类,还要增加工厂的方法,虽然不违背开放封闭原则,但是影响开发效率。

使用简单工厂与反射对抽象工厂的升级

状态图:


简单工厂类的升级

我们可以使用反射机制,把简单工厂类的判断逻辑(switch case)去除,这样我们得到的工厂还依旧符合我们的目标。对于客户端我们只需要DataAccrss类即可。还有对于我们要增加多一种产品,我们只需要增加一个接口类、两个具体类即可。

例子如下:


image.png
  • 对于db数据的名字我们可以卸载配置文件里面,易于修改。

十六章 状态模式

  • 定义: 当一个对象的内在状态改变时,准许改变其行为,这个对象看起来像改变其类。
状态图
  • 优点:
  1. 将特定状态局部化,把不同状态划分开来。
  2. 状态模式可以将各种状态的转移逻辑分布在各个子类,减少相互间的依赖。
  • 应用
    当一个对象的的行为取决于它的状态时,并且他更具运行时状态改变的行为,他就可以使用状态模式。

第十七章 适配器模式

  • 定义:将一个类的接口转换为客户希望的另一个接口。Adapter模式使得原本接口不一致的而不能一起工作的类可以协同任务。
适配器状态图

解释:target是客户端知道的接口。 适配器需要去实现这个target的接口函数,然后调用Adeptee特殊接口的函数组合完成这个接口函数的功能。 最后,客户端只需要 Target target = new Adapter; 就可以协同任务了。

  • 应用
  1. 对于使用一个已经存在的类,但如果他的接口和你的要求不同时,但是两个类做的事情相似,而双方不太容易修改时,可以使用适配器模式

  2. 只能说使用适配器是不得已的补救措施,如果可以统一接口或者是扩展功能,我们在设计之初尽量做到这个两方面的考虑。

第十八章 备忘录模式

  • 定义:在不破坏封装性的前提之下,捕获一个对象的内部状态,并在该对象之外保存这个状态,如此的话,我们就可以将该对象恢复至原先保存的状态。
备忘录模式
  • 应用
    备忘录模式适用于功能比较复杂,但是要维护或者记录历史的类,或者是需要保存一部分属性的类。(例如:拥有撤销功能的类)

第十九章 组合模式

  • 定义:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单对象和组合对象的使用具有一致性。
组合模式

例子:


公司例子

菱形实线箭头是拥有的关系。

  • 优点
  1. 基本对象可以被组合成更复杂的对象,而这个对象又可以被组合,不断递归。
    2.用户只需要下一层结点的组装
    3.组合模式让用户不用以叶节点还是组件结点来看待对象,一致使用接口即可。

第二十章 迭代器

  • 定义:提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露该对象的内部表示。
迭代器模式

虚线箭头是依赖关系,实现是关联关系。
例子:


具体的迭代器
具体的集合类
  • 优点:
    迭代器模式就是分离集合对象的遍历行为, 抽象出一个迭代器负责,做到不暴露内部结构,又能透明化访问集合内部数据。

java的反射相关知识:
参考博客

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容

  • 先试着翻译呦,看用了哪个时态,不要往下滑 1、你的钥匙呢?我不知道,我把它弄丢了。2、Sally在吗?她刚出去了。...
    梦未央Almost阅读 314评论 0 1
  • 今年的答辩,从预审就疙疙瘩瘩,答辩前后一波三折。放假在家没闲着,不停给群里毕业的同学写通知。列上其中一条以备存。 ...
    王格格阅读 289评论 0 1
  • 小娴与佛世尊 朱朱莉 人间又过了一年。 佛世尊正在极乐世界注视着一朵池中白莲花的盛开。 一花一世界,一叶一菩提。所...
    朱朱莉阅读 383评论 0 0
  • 转移紫砂艺术固有概念的东方之美 吴鸣先生是紫砂陶艺族中的另类,他的作品是具有深刻内涵的现代艺术,观赏他的陶艺你首先...
    古风雅韵_82fb阅读 170评论 0 0