1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ellse语句来做状态判断来进行不同情况的处理.但是对复杂状态的判断就显得“力不从心了”.随着增加新的状态或者修改一个状体(if else(或switch case)语句的增多或者修改)可能会引起很大的修改,而程序的可读性,扩展性也会变得很弱.维护也会很麻烦.那么我就考虑只修改自身状态的模式. 例子1:按钮来控制一个电梯的状态,一个电梯开们,关门,停,…
一.引言 今天我们开始讲“行为型”设计模式的第六个模式,该模式是[状态模式],英文名称是:State Pattern.无论是现实世界,还是面向对象的OO世界,里面都有一个东西,那就是对象.有对象当然就有状态了.每个对象都有其对应的状态,而每个状态又有对应一些相应的行为,在不同状态下,行为的的方式也是不一样.如果某个对象有多个状态时,那么就会有很多对应的行为.那么对这些状态的判断和根据状态完成的行为,就会导致多重条件语句交织在一起,并且如果添加一种新的状态时,需要更改之前现有的代码.这样的设计显然…
(当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类.) 在软件开发过程中,很多对象也会像水和信号灯一样具有多种状态,这些状态在某些情况下能够相互转换,而且对象在不同的状态下也将有不同的行为.最直接的解决方案是将所有可能考虑到,然后使用if else 语句来进行不同情况的处理,但是这种硬编码方法在对待复杂状态的判断就显得力不从心了,增加新的状态或修改一个状态都有可能会导致原有的程序大幅度·的修改. 我们可以将不同的状态设为对应的状态对象,再将状态抽象化调用,便不必考虑复杂的状态逻…
定义: 当一个对象有多个状态,并且在每个状态下有不同的行为,可以使用状态模式来在其内部改变状态时改变其行为,而客户端不会察觉状态的改变,仍使用同样的方法或接口与对象进行交互. 结构图: Context:上下文类,与客户端进行交互的对象.内部包含了会导致状态改变的成员变量,各种状态的实例以及对客户端交互的接口.当客户端执行业务方法时,类本身不做处理,而是将其转发给自己的内部状态处理,当状态处理完成后,进行检查是否需要更改状态. State:抽象State类,定义了各种状态的统一的接口,由自状态实现…
1.场景模拟 考虑一个在线投票的应用,分为四种情况 正常投票 正常投票以后还继续重复投票 用户恶意投票 黑名单用户 2.不用模式的解决方案 package demo17.state.example1; import java.util.*; /** * 投票管理 */ public class VoteManager { /** * 记录用户投票的结果,Map<String,String>对应Map<用户名称,投票的选项> */ private Map<String,Stri…
状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改变其行为.这个对象看上去就像是改变了它的类一样.状态模式的结构 用一句话来表述,状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类.状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变.状态模式的示意性类图如下所示: 状态模式所涉及到的角色有: 环境(Context)角色,也称上…
State??? State模式中,我们用类来表示状态.以类来表示状态后,我们就能通过切换类来方便地改变对象的状态.当需要增加新的状态时,如何修改代码这个问题也会很明确. 直接用状态代替硬编码 依赖于状态的处理,来执行具体的操作 理清职责 实现功能: ·有一个金库 ·金库与警报中心相连 ·金库里有警铃和正常通话用的电话·金库里有时钟,监视着现在的时间 ·白天的时间范围是9:00~16:59,晚上的时间范围是17:00~23:59和0:00~8:59 ·金库只能在白天使用 ·白天使用金库的话,会在…
X86保护模式  八操作系统类指令 通常在操作系统代码中使用,应用程序中不应用这些指令 指令分为三种:实模式指令,任何权级下使用的指令.实模式权级0下可执行的指令和仅在保护模式下执行的指令 一  实模式和任务特权级下可执行的指令 1.存储全局和中断描述符表寄存器指令 利用存储描述符表寄存器指令能把描述符表寄存器的内容保存到指定的存储单元.与GDT与IDT被所有任务共享不同,LDT是每个任务私有的.所以存储局部描述符表寄存器的LDTR的指令不在所列 a) 存储全局描述符表寄存器指令 SGDT QW…
/** * @author stone */ public class WindowState { private String stateValue; public WindowState(String stateValue) { this.stateValue = stateValue; } public String getStateValue() { return stateValue; } public void setStateValue(String stateValue) { t…
本文来讲解一下两个结构比较相似的行为设计模式:策略模式和状态模式.两者单独的理解和学习都是比较直观简单的,但是实际使用的时候却并不好实践,算是易学难用的设计模式吧.这也是把两者放在一起介绍的原因,经过对比和实例介绍,相信应该会一些比较深刻的感知.最后在结合个人的体会简单聊一下对这两个模式的一些看法. 1. 模式概念 1.1 策略模式 运行时更改类的行为或算法,从而达到修改其功能的目的: 使用场景: 一个系统需要动态地在几种算法中选择一种,而这些算法之间仅仅是他们的行为不同. 此外决策过程中过多的…