JAVA-状态设计模式
2015-12-23 09:34
387 查看
状态模式(State Pattern)是设计模式的一种,属于行为模式。
定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
意图:允许一个对象在其内部状态改变时改变它的行为
适用场景:
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
实例
1, 接口 State.java
2, 具体状态一开始, StartState.java
3, 具体状态二草稿,DraftState.java
4, 具体状态三发布,PublishState.java
5, 具体状态四完成,CompletedState.java
6, 状态容器 及客户端调用, StateMachine.java
定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
意图:允许一个对象在其内部状态改变时改变它的行为
适用场景:
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
实例
1, 接口 State.java
1 package com.my.code; 2 3 public interface State { 4 void handle(StateMachine machine); 5 }
2, 具体状态一开始, StartState.java
1 package com.my.code; 2 3 public class StartState implements State { 4 5 public void handle(StateMachine machine) { 6 System.out.println("Start to process..."); 7 machine.setCurrentSate(new DraftState()); 8 } 9 }
3, 具体状态二草稿,DraftState.java
1 package com.my.code; 2 3 public class DraftState implements State { 4 5 public void handle(StateMachine machine) { 6 System.out.println("Draft..."); 7 machine.setCurrentSate(new PublishState()); 8 } 9 }
4, 具体状态三发布,PublishState.java
1 package com.my.code; 2 3 public class PublishState implements State { 4 5 public void handle(StateMachine machine) { 6 System.out.println("Publish..."); 7 machine.setCurrentSate(new CompletedState()); 8 9 } 10 11 }
5, 具体状态四完成,CompletedState.java
1 package com.my.code; 2 3 public class CompletedState implements State { 4 5 public void handle(StateMachine machine) { 6 System.out.println("Completed"); 7 machine.setCurrentSate(null); 8 } 9 }
6, 状态容器 及客户端调用, StateMachine.java
1 package com.my.code; 2 3 import java.io.IOException; 4 5 public class StateMachine { 6 private State currentSate; 7 8 public State getCurrentSate() { 9 return currentSate; 10 } 11 12 public void setCurrentSate(State currentSate) { 13 this.currentSate = currentSate; 14 } 15 16 public static void main(String[] args) throws IOException { 17 StateMachine machine = new StateMachine(); 18 State start = new StartState(); 19 machine.setCurrentSate(start); 20 while(machine.getCurrentSate() != null){ 21 machine.getCurrentSate().handle(machine); 22 } 23 24 System.out.println("press any key to exit:"); 25 System.in.read(); 26 } 27 }
相关文章推荐
- Java 将图片转二进制再将二进制转成图片
- java反射
- java 方法覆写与重载原则
- JAVA HashMap的使用方法(例子)
- Java 大数加减乘(无除),不含小数点
- ionic js与Java互操作插件
- Java基础教程之构造器与方法重载
- Java开源框架、类库和软件集合:Awesome Java
- JavaEE应用的组件
- Java基础教程之对象的方法与数据成员
- JAVA学习第五十七课 — IO流(十一)
- Java并发编程:Callable、Future和FutureTask
- Java WebService 简单实例
- eclipse启动svn报错Failed to load JavaHL Library解决办法
- 如何设置eclipse格式化代码时不自动换行
- 40个Java多线程问题总结
- Java基本数据类型总结
- java 中时间的有关问题
- 详解Java的Hibernate框架中的缓存与原生SQL语句的使用
- javaEE web开发中文乱码分析