模式开始第七天,完结


引用大佬的博客:http://blog.csdn.net/lovelion/article/details/17517213
18.备忘录模式


备忘录的核心是备忘录类以及用于管理备忘录的负责人类的设计


该模式的角色分析


1.Originator(原发器) 功能: 创建一个备忘录 , 一般是将需要保存内部状态的类设计为原发器


2.memento(备忘录) 存储原发器的内部状态,根据原发器来决定要保存哪种内部状态,备忘录的设计一般可以参考原发器的设计
根据实际需要确定备忘录类中的属性  该类的对象不能直接供其他类使用,原发器的设计在不同的编程语言中实现机制会有所不同


Caretaker(负责人) 负责人又称为管理者,它负责保存备忘录,但是不能对备忘录的内容进行操作或检查。
负责人类中可以存储一个过多个备忘录对象,它只负责存储对象 ,而不能修改对象们也无需知道对象的实现细节


如何使用备忘录模式:
1.原发器主动调用自己的保存功能生成一个备忘录
2.创建一个全局负责人来保存生成的备忘录
3.在需要恢复的时候调用负责人get()来获取保存的备忘录,之后进行相关原发器数据的更改




19.观察者模式
观察者模式的别名包括:发布订阅模式,模型视图模式,源监听器模式,从属者模式 是一种对象行为型模式


该模式的角色分析
 Subject(目标):目标又称为主题,它是指被观察的对象,在目标中定义了一个观察者集合,一个观察目标可以接收任意数量的观察者来观察,它提供一系列方法来增加和删除观察者对象
 它提供了一系列的方法来增加和删除观察者对象
 ConcreteSubject(具体目标) 目标的实现类,如果无需扩展目标类,则具体目标类可以省略
 Observer(观察者):观察者将对观察目标的改变做出反应。观察者一般定义为接口,该接口声明了更新数据的方法update()
 ConcreteObserver(具体观察者) 维护了一个具体目标对象的引用,可以通过调用具体目标类的add()/delete()方法将自己添加或移除观察者列表


观察者模式定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新






20.状态模式
状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象。
该模式的角色分析
Context(环境类):环境类又称为上下文,它是可以拥有多种状态的对象,也可以只持有一个对象(看设计)
State(抽象状态类):用于定义一个接口以封装与环境类的一个特定状态相关的行为,在抽象状态类中定义了各种不同状态对应的方法
而在其子类中实现这些方法,不同的状态自对象行为可能不同
ConcreteState(具体状态类):每一个子类实现一个与环境类的一个状态相关的行为,每一个具体状态类对应环境的一个具体状态




--环境类实际上是真正拥有状态的对象,我们只是将环境类中与状态有关的代码提取出来封装到专门的状态类中
在状态模式的使用过程中,一个对象的状态之间还可以进行相互转换,通常有两种方式:
1.统一有环境类来负责状态之间的转换:
维护一个抽象状态对象引用,在各个业务逻辑里面赋予相关具体类的实现
2.由具体状态类来负责状态之间的转换
维护很多个具体状态对象,在各个业务逻辑中使用不同的状态对象来完成逻辑操作


踢球的例子:
踢足球是要看状态的,当然状态是会转换的。
有的球员上场时状态不行,老是“思考人生”,此时处于“梦游状态”;
踢着踢着状态好起来了,头顶脚踢,运气好的话还能进球,此时处于“亢奋状态”;
然后随着体力下降,动作变形,射门软绵无力,一碰就倒,此时又处于“体力透支状态”。
随着比赛的进行,这几个状态会发生转换,
而且在不同状态下球员的行为也不同,
在梦游状态下基本上没有射门,
在亢奋状态下基本上没有传球(全自己射了),
在体力透支状态下基本上没有抢断(自己都拿不稳了,还抢啥抢)。
如果将每一种状态封装在一个状态类中,那么球员就是拥有状态的环境类了。
---状态模式(State): 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类


21.策略模式
定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)
该模式的角色分析
Context(环境类)维护一个抽象策略类,使用该策略类完成逻辑处理
Strategy(抽象策略类) 定义了一个完成逻辑处理的抽象方法
ConcreteStrategy(具体策略类)不同的实现类会实现不同的处理逻辑


使用:
在调用处理方法时,环境类维护的策略类会有具体的策略类进行实现,从而能实现各种不同的逻辑处理


这个简单的很很很。特别是在java中的匿名类以及lambda表达式的使用


22.模板方法


这个更简单。。在一个过程中,会有相同的操作以及不同的操作,这个时候
将相同的操作抽取到基类中,且这些操作都已经在基类中有了实现,在不同的操作的地方抽取出来称为一个抽象方法

每个不同的子类可以去实现不同的操作,引出钩子方法,钩子方法可以用来让具体子类自行判断是否执行这些实现的不同操作


以下两种模式使用的地方确实很少,本人有点迷...
23.访问者模式


24.解释器模式

你可能感兴趣的:(模式开始第七天,完结)