状态模式(state pattern)又称为状态对象模式,该模式允许一个对象在其内部状态改变时改变其行为。
定义:
状态模式的类图如下所示。
状态械涉及以下3个角色:
state.java
// 抽象角色 public abstract class state { // 定义一个环境角色 protected context context; // 设置环境 public void setcontext(context context) { this.context = context; } // 抽象行为 public abstract void handle(); }
context.java
// 环境角色 public class context { // 定义状态 public static state state1 = new concretestate1(); public static state state2 = new concretestate2(); // 当前状态 private state currentstate; // 获取当前状态 public state getcurrentstate() { return currentstate; } // 设置当前状态 public void setcurrentstate(state currentstate) { this.currentstate = currentstate; // 设置环境中的状态 currentstate.setcontext(this); } // 行为委托 public void handle1() { // 切换到状态1 this.setcurrentstate(state1); this.currentstate.handle(); } public void handle2() { // 切换到状态1 this.setcurrentstate(state2); this.currentstate.handle(); } }
concretestate1.java
// 具体状态1 public class concretestate1 extends state { // 状态1的行为逻辑处理 @override public void handle() { system.out.println("行为1的逻辑处理"); } }
concretestate2.java
// 具体状态2 public class concretestate2 extends state { // 状态2的行为逻辑处理 @override public void handle() { system.out.println("行为2的逻辑处理"); } }
client.java
// 应用程序 public class client { public static void main(string[] args) { // 定义环境角色 context context = new context(); // 执行行为 context.handle1(); context.handle2(); } }
优点:
缺点:
应用场景:
摘自:
青岛东合信息技术有限公司 . 设计模式(java版) . 电子工业出版社,2012,170-172.
如对本文有疑问, 点击进行留言回复!!
设计模式之解释器模式(附:SpelExpressionParser中解释器模式应用分析)
网友评论