Java设计模式_(行为型)_状态模式
来源:互联网 发布:淘宝如何发布新产品 编辑:程序博客网 时间:2024/05/22 09:02
引用百科
(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式的示意性类图如下所示:
相关角色
状态模式所涉及到的角色有:
●环境(Context)角色,也成上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给出此环境对象的现有状态。
●抽象状态(State)角色:定义一个接口,用以封装环境(Context)对象的一个特定的状态所对应的行为。
●具体状态(RealState)角色:每一个具体状态类都实现了环境(Context)的一个状态所对应的行为。
具体实现
具体代码
1、状态接口
//状态类接口public interface State {// 行为操作public void handle();}
//具体状态类实现Apublic class RealStateA implements State {// 具体行为实现@Overridepublic void handle() {System.out.println("状态A...");System.out.println("执行A操作...");}}//具体状态类实现Bpublic class RealStateB implements State {// 具体行为实现@Overridepublic void handle() {System.out.println("状态B...");System.out.println("执行B操作...");}}
3、环境角色类
//环境角色类public class Context {// 内部状态private State status;public void setStatus(State status) {this.status = status;}// 行为public void request() {status.handle();}}
public class Client {public static void main(String[] args) {// 创建环境Context context = new Context();// 设置环境状态context.setStatus(new RealStateA());// 状态改变时行为也自动改变context.request();// 状态改变时行为也自动改变context.setStatus(new RealStateB());context.request();}}
以上代码简单实现了状态模式,运行输出:
状态A...
执行A操作...
状态B...
执行B操作...
以上代码状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。
适用性
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态,这个状态通常用一个或多个枚举常量表示,通常,有多个操作包含这一相同的条件结构。State模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。
- Java设计模式_(行为型)_状态模式
- Java设计模式_行为型_状态模式_工作还是休息
- Java设计模式_(行为型)_责任链模式
- Java设计模式_(行为型)_命令模式
- Java设计模式_(行为型)_迭代模式
- Java设计模式_(行为型)_中介者模式
- Java设计模式_(行为型)_备忘录模式
- Java设计模式_(行为型)_观察者模式
- Java设计模式_(行为型)_策略模式
- Java设计模式_(行为型)_模版方法模式
- Java设计模式_(行为型)_访问者模式
- Java设计模式_(行为型)_解析器模式
- Java设计模式_行为型_观察者模式_任意行为的监听
- Java设计模式_行为模式_观察者模式
- 23种设计模式(20)_行为型_状态者模式(State Pattern)
- Java设计模式_行为型_责任链模式_差旅报销如此简单
- Java设计模式_行为型_访问者模式_每个人的不同结果
- Java设计模式_行为型_中介者模式_租个房子不过如此
- 用实例说话:ES6的十大特性
- 什么是迭代器(Iterator)
- 《Effective Java》笔记 使类和成员的可访问性最小化
- DAY1 2017.10.13
- 【知识发现】基于物品的协同过滤推荐算法python实现
- Java设计模式_(行为型)_状态模式
- Linux下用Python调用C模块
- 经典sql语句大全
- jni常用函数注释
- 多线程中传参错误,以及'list' object is not callable错误解决方法
- 1002. 写出这个数 (20)
- C++笔记——关于cout的控制
- Unity3D-Android跳转到指定平台(华为商店为例)
- 基于结构光的相移法三维重建matlab