摘要:电子游戏过去都会有一个“记录”或者“存盘”的功能,就是当玩家在游戏过程中将当前的游戏状态记录下来,以便于之后重新登录游戏后读取到记录时的状态。这种将对象的状态先保存起来,以后再根据保存的数据恢复对象状态的设计模式,就是备忘录模式。 1. 备忘录模式 备忘录模式的UML类图为: Originator:
阅读全文
随笔分类 - 设计模式
摘要:电子游戏过去都会有一个“记录”或者“存盘”的功能,就是当玩家在游戏过程中将当前的游戏状态记录下来,以便于之后重新登录游戏后读取到记录时的状态。这种将对象的状态先保存起来,以后再根据保存的数据恢复对象状态的设计模式,就是备忘录模式。 1. 备忘录模式 备忘录模式的UML类图为: Originator:
阅读全文
摘要:遍历元素在编程中十分常用,毋庸置疑只要是一个容器,都应该提供遍历其内部元素的方式,这就是本文介绍的迭代器模式。 1.迭代器模式 迭代器模式(Iterator pattern) 提供一个迭代器,它可以按顺序遍历并访问容器中的元素,而无需暴露迭代器的内部实现。 迭代器模式如此常用,以至于Java标准库中
阅读全文
摘要:电灯开关一般有两个状态:开和关,通过按下开关可以关闭或者打开电灯。那么,“开”和“关”实际上应该是开关的两种内部状态,当开关的状态发生变化时,其行为也会发生变化,比如,开关状态变为了“关”,那么就应该熄灯 并且使能“开”。 1.状态模式 状态模式的定义如下: 状态模式(State Pattern),
阅读全文
摘要:交通信号灯相信大家都不陌生,红灯停、绿灯行,见了黄灯等一等。交通信号灯、海边的信号塔等等,都伫立在那里,随时准备给行人/货船发送信号,以提醒行人/货船该采取相应行动了。信号灯就是发布信号的对象,行人是接收信号并采取具体行动的观察者。这一过程,在程序设计中也常常用到,即本文介绍的观察者模式。 1.观察
阅读全文
摘要:电子设备之间有线数据传输常用USB来进行,例如现在某果笔记本统一采用了USB type-c接口,而目前绝大多数即用即插存储介质用的是USB type-b接口,那么为了适配,往往需要消费者购买转换坞等中间设备进行过渡,这种模式其实就是程序设计中常用的适配器模式,另一个形象的实例就是扳手为了拧动型号的螺
阅读全文
摘要:当你翻看一本新书的时候,总是会首先翻到书的目录页,通过目录,让你知道书的主要内容是什么,每一章的内容是从哪一页开始。对的,目录就像是一本书的窗口。本文要介绍的外观模式或者叫做门面模式,正如书的目录一样,往往充当着一个或者多个子系统窗口的角色。 1.外观模式 外观模式(Facade Pattern)
阅读全文
摘要:创建一个对象,有时候是很复杂的一件事,比如在模板方法模式中讲到的Car对象,创建它,就需要装配底盘、轮胎、发动机、车身等部件,甚至之后还需要喷漆等工序。模版方法模式,主要解决的是算法中不变部分与可变部分的解耦,将可变部分算法推迟到子类中去实现;而本文要介绍的建造者模式,则是一种创建模式,顾名思义,就
阅读全文
摘要:抽象是面向对象编程的核心思想,从某种角度来看,抽象,就是把可变的部分和不可变部分分离开来,今天介绍的模板方法模式,体现的就是这样一种思想。总结起来,模板方法模式可以用一句话来概括:以不变应万变。 1.模板方法模式 模板方法模式(Template Method Pattern),定义了一个算法的骨架,
阅读全文
摘要:细胞的有丝分裂会产生两个基因相同的细胞,基因相同就表示它们一模一样。这一过程很像代码设计中的一个设计模式,即原型模式。 1.原型模式 原型模式(Prototype Pattern),就是以一个现有的对象为原型,克隆出一个或多个一模一样的对象。 原型模式的UML类图: Prototype(抽象原型类)
阅读全文
摘要:很多时候我们试图发送一个请求的时候,实际上是由代理将我们的请求转发给目标对象,这种代理方式叫做正向代理,正向代理就是客户端的代理,我们知道访问目标的真实地址,而真实目标只知道这次请求是代理发送的却不知道背后的我们;又有些时候,我们输入某url发送一个请求,实际上这个url并非真实服务器,而是服务器的
阅读全文
摘要:按照单一职责原则,某一个对象只专注于干一件事,而如果要扩展其职能的话,不如想办法分离出一个类来“包装”这个对象,而这个扩展出的类则专注于实现扩展功能。 装饰器模式就可以将新功能动态地附加于现有对象而不改变现有对象的功能。 1.装饰器模式 实际上Java提供的工具包中,IO相关工具就普遍大量使用了装饰
阅读全文
摘要:假设有这样一个场景:使用一个画图软件画一辆汽车,细节忽略,我们暂且只画汽车的车身、轮胎、底盘三个部分,画完之后进行上色,上色之后再进行矫正。对于画图而言,车身、底盘和轮胎组成一辆汽车,这样的结构很稳定,不会说多出一个翅膀,而不稳当的部分在于汽车的颜色和细节部分,本文要介绍的访问者模式,致力于将“不稳
阅读全文
摘要:面向对象编程中,对象之间存在着种种关系,比如has-a, has-a关系又叫组合关系,比如公司和部门之间,集体和个人之间等等。公司一般都会有呈树状的组织架构,有时候,希望使用树状结构来表达整体和部分之间的关系,使客户能够不加以区分地处理结构中的每一个对象,这时候就会用到 组合模式。 1.组合模式 组
阅读全文
摘要:单例模式是开发程序过程中最常见的开发模式之一,很多优秀的框架都是采用单例模式设计的,比如spring容器,默认情况下就是采用单例模式来管理Bean对象的。正是因为单例模式简单而常用,所以很多人开发中会滥用单例模式,一些批评者认为,很多情况下根本没有必要使用单例,而且使用单例模式,就必然会引入一个全局
阅读全文
摘要:计算器中,我们输入“20 + 10 - 5”,计算器会得出结果25并返回给我们。可你有没有想过计算器是怎样完成四则运算的?或者说,计算器是怎样识别你输入的这串字符串信息,并加以解析,然后执行之,得出结果?这里就引出了今天我想要介绍的一个设计模式 解释器模式。 1.解释器模式 解释器模式(Interp
阅读全文
摘要:面向对象编程的过程中,经常需要创建对象,如果频繁创建对象特别是使用容器持有对象,那么内存的占用就会越来越高,这对于大型项目来说有时候是致命的。比如对于一篇文档,文档中有文字,而文字是有字体信息、格式信息、颜色信息、位置信息等,显而易见,在面向对象编程中,每个文字被视作一个来处理,那么一篇文档中如果有
阅读全文
摘要:策略的选择很多时候再开发过程中都会涉及到,比如说排序,有时候需要使用从大到小排序的方案,有时候需要从小到大的排序方案。与其直接在使用时实现排序算法,不如将算法封装起来,这样的话,就可以在程序运行时根据不同场景动态地选择合适的算法了。运行时动态选择方案可以使代码更灵活、复用性高、易于扩展等,策略模式就
阅读全文
摘要:相信大家和我一样,在实际开发应用过程中,很难看代码中有直接new对象的情况,在一开始,也会被前辈告诫,尽量不要使用new来构造对象,尽量使用工厂方法获取对象云云。但是,我相信很多人和我一样,一开始是一知半解的状态,凭什么不能这样做,用工厂方法获取对象,多此一举吧?但是随着开发经验的逐渐累积,我发现将
阅读全文
摘要:说到中介大家都不会陌生,买房子租房子有中介,出国留学有中介,买卖二手车还是有中介。那么中介到底是个什么角色呢?实际上,中介就是让买卖双方不必面对面直接交流,由他/她来完成买卖双方的交易,达到解耦买卖人,同时给买卖双方带来方便的一个职业角色。对于应用开发来说,代码就是来源于生活,就是生活的抽象,因此,
阅读全文
摘要:假如有这样一个场景:小红做作业的时候,有一道题不会做,这时候,小红就去问同桌小明怎么做,小明表示也不会做,于是,小红又去问学习委员小黄,小黄也不会做,最后,小红不得不请教老师这个问题,老师给江红讲解了这个问题。 从上述场景中,我们看到小红依次找了 小明、小黄、老师,如果用流程图表示,那么就是: 看起
阅读全文
|