《Head First设计模式》 读书笔记16 其余的模式(二) 蝇量 解释器 中介者

蝇量(Flyweight Pattern)

  如想让某个类的一个实例能用来提供许多“虚拟实例”,就使用蝇量模式(Flyweight Pattern)

例子场景:景观设计中的树。

  只用一个树实例和一个客户对象来维护所有的树的状态。

优点:

  减少运行时对象实例的个数,节省内存。

  将许多“虚拟”对象的状态集中管理。

用途:

  当一个类有许多的实例,而这些实例能被同一方法控制的时候,我们就可以使用蝇量模式。

缺点:

  蝇量模式的缺点在于,一旦你实现了它,那么单个的逻辑实例将无法拥有独立的而不同的行为。

解释器(Interpreter Pattern)

  使用解释器模式(Interpreter Pattern)为语言创建解释器。

例子场景:一种简单的给孩子用的编程语言,定义一个语法,表现并解释语法中的句子,让学生看到这个语言控制程序中鸭子的效果。

  当你需要实现一个简单的语言时,就使用解释器模式定义语法的类,并用一个解释器解释句子。每个语法规则都用一个类代表。

  要想解释这种语言,就调用每个表达式类型的interpret()方法。此方法需要传入一个上下文(context)——也就是我们正在解析的语言字符串输入流——然后进行比对并采取适当的动作。

优点:

  将每一个语法规则表示成一个类,方便于实现语言。

  因为语法由许多类表示,所以你可以轻易地改变或扩展此语言。

  通过在类结构中加入新的方法,可以在解释的同时增加新的行为,例如打印格式的美化或者进行复杂的程序验证。

用途:

  当你需要实现一个简单的语言时,使用解释器。

  当你有一个简单的语法,而且简单比效率更重要时,使用解释器。

  可以处理脚本语言和编程语言。

缺点:

  当语法规则的数目太大时,这个模式可能会变得非常繁杂。在这种情况下,使用解释器/编译器的产生器可能更合适。

中介者(Mediator Pattern)

  使用中介者模式(Mediator Pattern)来集中相关对象之间复杂的沟通和控制方式。

例子场景:有一个自动屋,但是其中有着复杂的规则。想要持续地追踪每个对象的每个规则,以及众多对象之间彼此错综复杂的关系,实在不容易。

  在这个系统中加入一个中介者,一切都变得简单了:

  每个对象都会在自己的状态改变时,告诉中介者。

  每个对象都会对中介者所发出的请求作出回应。

  中介者内包含了整个系统的控制逻辑。当某装置需要一个新的规则时,或者是一个新的装置被加入系统内,其所有需要用到的逻辑也都被加进了中介者内。

优点:

  通过将对象彼此解耦,可以增加对象的复用性。

  通过将控制逻辑集中,可以简化系统维护。

  可以让对象之间所传递的消息变得简单而且大幅减少。

用途:

  中介者常常被用来协调相关的GUI组件。

缺点:

  中介者模式的缺点是,如果设计不当,中介者对象本身会变得过于复杂。

转载于:https://www.cnblogs.com/mengdd/archive/2013/05/12/3073725.html

《Head First设计模式》 读书笔记16 其余的模式(二) 蝇量 解释器 中介者相关推荐

  1. 大话设计模式读书笔记11----建造者模式(Builder)

    建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的建造过程可以创建不同的表示. 1.Builder是什么? 是创建一个Product对象的各个部件指定的抽象接口. 2.Con ...

  2. 大数据之路读书笔记-16数据应用

    大数据之路读书笔记-16数据应用 全球知名咨询公司麦肯锡称:"数据,已经 透到当今每一个行业和业务职能领域,成为重要的生产要素.人们对于海量数据的挖掘和运用,预示着新一波生产率增长和消费者盈 ...

  3. 大话设计模式读书笔记

    主题 概要 设计模式 大话设计模式读书笔记 编辑 时间 新建 20170423 序号 参考资料 1 大话设计模式 重新看了一遍设计模式,除了一些已经特别熟悉的模式,都自己敲了一遍代码,有些豁然开朗的感 ...

  4. JavaScript设计模式读书笔记(一)= 创建型设计模式

    全系列目录 JavaScript设计模式读书笔记(一)=> 创建型设计模式 JavaScript设计模式读书笔记(二)=> 结构型设计模式 JavaScript设计模式读书笔记(三)=&g ...

  5. JavaScript设计模式读书笔记(四)= 技巧型设计模式

    全系列目录 JavaScript设计模式读书笔记(一)=> 创建型设计模式 JavaScript设计模式读书笔记(二)=> 结构型设计模式 JavaScript设计模式读书笔记(三)=&g ...

  6. 设计模式读书笔记-----工厂方法模式

    一.问题 在前一章<设计模式读书笔记-----简单工厂模式>中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨.如 ...

  7. 设计模式读书笔记汇总

    文章目录 一:简单工厂模式:代码无错就是优? 二:策略模式:出行(公交,打车...)(android中的动画) 三:装饰模式 ---->>>android源码中:Context和Co ...

  8. 设计模式学习笔记——享元(Flyweight)模式

    设计模式学习笔记--享元(Flyweight)模式 @(设计模式)[设计模式, 享元模式, flyweight] 设计模式学习笔记享元Flyweight模式 基本介绍 享元案例 类图 实现代码 Big ...

  9. 设计模式学习笔记——单例(Singleton)模式

    设计模式学习笔记--单例(Singleton)模式 @(设计模式)[设计模式, 单例模式, Singleton, 懒汉式, 饿汉式] 设计模式学习笔记单例Singleton模式 基本介绍 单例案例 类 ...

最新文章

  1. 虚幻中的风格化环境制作学习教程
  2. ”计算机操作系统“学习笔记1
  3. 全国“最高”的视觉竞赛,华为Atlas打通遥感图像智能分析任督二脉
  4. Spark任务提交底层原理
  5. 实践篇:利用函数计算轻松构建全文检索系统
  6. 爆料!亦庄地区数据中心将面临史上最长群体”限电“
  7. 使用Unity从零点五开始,做半个不能玩的小游戏(完)
  8. 线程休眠 sleep
  9. java 动态二维数组,菜鸟求助: 二维数组如何实现动态接收?
  10. 从 0 到 70%:Chrome 上位揭秘!
  11. 服务器虚拟化 远程,服务器虚拟化 远程
  12. 状态模式(Strategy Pattern)
  13. UltraLAB台式图形工作站(独门绝技~多核+超高频~极速计算工作站H490介绍)
  14. Selenium自动化测试:如何使用cookie跳过验证码登录
  15. 【Pygame小游戏】Python版有迷宫嘛?原来藏在个地方呀~
  16. 获取android 用到的所有开发包文件
  17. 从初学者的角度看Solr概述
  18. 预测分析 Python ARIMA模型预测(学习笔记)
  19. 扫一扫功能在手机便签的哪里
  20. SVG路径(path)中的圆弧(A)指令的语法说明及计算逻辑

热门文章

  1. 华为怎么改输入法皮肤_微信和QQ个性键盘皮肤
  2. 《MySQL——如何解决一主多从的读写分离的过期读问题》
  3. Java FileInputStream finalize()方法与示例
  4. mcq 队列_MCQ | 密码学中作为IDEA,DES,AES,RSA的块密码
  5. nextcloud+nginx+mysql,Ubuntu搭建Nginx-Nextcloud环境
  6. uva 1626——Brackets sequence
  7. 如果年轻,就出发吧!
  8. 二维map —— HDU1263
  9. Qt自定义对话框中边框阴影实现
  10. html类名定义规则_HTML入门笔记1