策略模式 策略模式的定义是:定义了一系列的算法,把它们一个个的封装起来,并且使它们可相互替换,让算法可以独立于使用它的客户而变化. 设计原则是:把一个类中经常改变或者将来可能会经常改变的部分提取出来作为一个接口,然后在使用类中包含这个接口的实例,这样使用类的对象就可以随意调用实现了这个接口的类行为. 在策略模式中有如下几个角色: 环境角色(Context): 此角色中实现了对策略角色的引用和使用. 抽象策略角色:此角色通常由抽象类或接口来实现,定义了,所以具体策略角色的行为. 具体策略角色:此角…
前言 状态模式是一种行为模式,用于解决系统中复杂的对象状态转换以及各个状态下的封装等问题.状态模式是将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象的状态可以灵活多变.这样在客户端使用时无需关心对象的状态,可以实现自身的一致性处理.最近工作有些忙,更新博客慢了.还是要严格要求自己的,抽时间也要坚持学习. 状态模式 概念介绍 状态模式允许一个对象在其状态改变时,改变它的行为,对象看起来似乎修改了它的类. 想要在改变自身状态时改变对象行为,最直接的方法就是在代码中将所有可能发生的情…
前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体理解为,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法结构即可冲定义该算法的某些特定步骤.模板方法模式是最为常见的设计模式之一,是基于继承的代码复用技术.架构师定义一套骨架,开发工程师按照骨架去实现具体的逻辑. 举例 在具体的项目中其实使用模板方法的场景有很多…
前言 这次要介绍的是备忘录模式,也是行为模式的一种 .现在人们的智能手机上都会有备忘录这样一个功能,大家也都会用,就是为了记住某件事情,防止以后自己忘记了.那么备忘录模式又是什么样子的呢?是不是和手机上的备忘录一样呢?下面来介绍一下. 备忘录模式 概念介绍 备忘录模式是指在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态.简单的来说就是平时玩的通关游戏,第一次前进了5步,第二次前进时踩到便便了,然后要回到之前的进度.例如下图结构…
前言 这次要介绍的是迭代器模式,也是一种行为模式.我现在觉得写博客有点应付了,前阵子一天一篇,感觉这样其实有点没理解透彻就写下来了,而且写完后自己也没有多看几遍,上次在面试的时候被问到java中的I/O的各种实现用到了什么设计模式,我愣是想半天没想出来了,人家还给提示了我也没想出来,最后还是面试官给出的答案,是装饰模式,听到答案后就恍然大悟了,前两天刚看了装饰模式,还写下了I/O操作中的各种类都是用到了装饰模式,后来想想两方面原因造成的当时没回答出来,一是面试时紧张就容易想不起来,二是对设计模式…
前言 这次介绍另一个行为模式,解释器模式,都说解释器模式用的少,其实只是我们在日常的开发中用的少,但是一些开源框架中还是能见到它的影子,例如:spring的spEL表达式在解析时就用到了解释器模式,以及mybatis在将SQL语句映射成对象时关系时.还有一些解析正则表达式和解析json等开源工具. 解释器模式 概念介绍 解释器模式是指给定一个使用规定格式和语法的语言,并且建立一个解释器来解释该语言中的句子.解释器本身就是一种按照规定的语法进行解析的方案,但是总体来说也是一种使用频率相对较低但学习…
前言 这次要介绍的是命令模式,这也是一种行为型模式.最近反正没有面试机会我就写博客呗,该投的简历都投了.然后就继续看书,其实看书也会给自己带来成就感,原来以前不明白的东西,书上已经给彻底的介绍清楚了,然后读到完了就有一种恍然大悟的感觉,怕自己理解的有问题,还要去网上搜各种答案来确保自己的理解确实没问题.最近看到一句话感觉很有道理:读书最好的目的在于,你会发现凭借自身阅读构建起来的小世界,能以体恤式的温柔,消除自身的苦难. 命令模式 概念介绍 命令模式:将一个请求封装为一个对象,从而使我们可用不同…
前言 这次要介绍的是外观模式(也称为门面模式),外观模式也属于结构型模式,其实外观模式还是非常好理解的,简单的来讲就是将多个复杂的业务封装成一个方法,在调用此方法时可以不必关系具体执行了哪些业务,而只关心结果即可.这个场景其实在日常开发中使用的频率还是非常高的,下面来简单了解一下吧. 外观模式 概念介绍 外观模式是隐藏了系统的复杂性,能够为子系统中的一组接口提供一个统一的接口.客户在使用系统时不必和子系统打交道了,降低了客户和子系统间的耦合. 举例 喝茶问题,当纪大烟袋跟和二想喝茶了,这个时候他…
前言 这次介绍结构型设计模式中的第二种模式,桥接模式. 使用桥接模式的目的就是为了解耦,松散的耦合更利于扩展,但是会增加相应的代码量和设计难度. 桥接模式 桥接模式是为了将抽象化与实现化解耦,让二者可以独立地变化.方便对每一部分的扩展,以及单独的维护.抽象化的一方与实现化的一方之间建立一个桥梁,这样两者的依赖关系就可以通过这个桥梁来建立了. 举例 三个小动物要过河,分别是小猪,小鸡,小马,小猪要去河对面的空地晒太阳,小鸡要去河对面的小树林里找虫子吃,小马要去河对面的草地里吃草.那么它们三个都要经…
前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pattern)和模板模式(Template Pattern). 策略模式 简介 策略模式(Strategy Pattern)属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化.其主要目的是…