bboyjing's blog


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 公益404
bboyjing's blog

HeadFirst设计模式二十三【原型模式】

发表于 2020-01-15 | 分类于 设计模式

当创建给定类的实例的过程很昂贵或很复杂时,可以使用原型模式。原型模式的核心是复制,Java原生就是支持。因为所有的JavaBean都继承自Object,而Object类提供一个clone()方法,可以讲一个JavaBean对象复制一份。但是,这个JavaBean必须实现一个Cloneable接口,表明这个JavaBean支持复制。

场景描述

有一个场景可以很好地来理解这个模式,就是西游记里的孙悟空,拔毛一吹瞬间变出数百个一模一样的分身。或者火影忍者中鸣人地影分身也有异曲同工之妙。下面用孙悟空地例子来看下如何实现原型模式。

阅读全文 »
bboyjing's blog

HeadFirst设计模式二十二【备忘录模式】

发表于 2020-01-15 | 分类于 设计模式

当有需要让对象返回之前的状态时,例如用户请求撤销操作,就可以使用备忘录模式。

场景描述

玩游戏时的存档就是一个很好的例子,比如游戏角色死掉后,恢复到存档时的状态。下面就来简单实现下。

阅读全文 »
bboyjing's blog

HeadFirst设计模式二十一【中介者模式】

发表于 2020-01-14 | 分类于 设计模式

使用中介者模式,又叫调停者模式,是用来集中相关对象之间复杂的沟通和控制方式的,使对象之间可以较松散地耦合。比如说WTO组织,各个贸易地区(国家)加入WTO组织之前,贸易状态可能是各个国家之间直接沟通,贸易关系是一张网。WTO是一个协调组织,各个贸易地区可以经由WTO组织进行协调。WTO扮演的正是中介者模式中的中介者角色,它取代了原本由各个贸易地区自行进行的相互协商和谈判的强耦合关系。加入WTO之后,贸易关系都指向了WTO,不再错综复杂。

中介者模式包括一下几种角色:

  • 抽象中介者角色:定义出同事对象到中介者对象的接口,其中主要的方法是一个或多个事件方法。
  • 具体中介者角色:从抽象中介者继承而来,实现了抽象超类所声明的事件方法。具体中介者知晓所有的具体同事类,它从具体同事对象接收消息、向具体同事对象发出命令。可以理解为就是上面说的WTO组织。
  • 抽象同事类角色:定义出中介者到同事对象的接口,同事对象只知道中介者而不知道其余同事对象。
  • 具体同事类角色:所有的具体同事类均从抽象同事类继承而来。每一个具体同事类都很清楚它自己在小范围内的行为,而不知道它在大范围内的目的。可以理解为就是上面说的每一个贸易地区(国家)。
阅读全文 »
bboyjing's blog

HeadFirst设计模式二十【解释器模式】

发表于 2020-01-10 | 分类于 设计模式

解释器模式可以用来为语言创建解释器,也就是说可以再创造出一门语言。

场景描述

为了说明解释器模式的实现方式,给出一个最简单的文法和对应的解释器模式的实现,就是模拟Java语言中对布尔表达式进行操作和求值。比如说,给定一个表达式:(true AND x) OR (y AND (NOT x)),求该表达式的值是true还是false。这个语言简单的文法如下:

1
2
3
4
5
6
Expression := Constant | Variable | Or | And | Not
And := Expression 'And' Expression
Or := Expression 'Or' Expression
Not := Expression 'Not' Expression
Variable := 任何标识符
Constant := 'true' | 'false'

文法中涉及到的名词,在代码实现部分均会有对应的类,下面就来看一下如何实现。

阅读全文 »
bboyjing's blog

HeadFirst设计模式十九【蝇量模式】

发表于 2020-01-10 | 分类于 设计模式

蝇量模式也叫享元模式,作用是让某个类的一个实例能用来提供许虚拟示例,也就是说节省内存。

场景描述

假设现在在设计一个景观系统,要想在其中加上一些树做点缀。树有一个XY坐标位置,而且可以根据树的年龄动态地将自己绘制出来。问题是,用户可能要在景观中设计非常非常多的树,有可能会让程序变得运行缓慢。下面看下蝇量模式如何解决这个问题。

阅读全文 »
1234…30
bboyjing

bboyjing

147 日志
17 分类
20 标签
友情链接
  • bailaohe
© 2021 bboyjing
由 Hexo 强力驱动
主题 - NexT.Mist