首页 > 代码库 > 【设计模式】—— 状态模式State
【设计模式】—— 状态模式State
前言:【模式总览】——————————by xingoo
模式意图
允许一个对象在内部改变它的状态,并根据不同的状态有不同的操作行为。
例如,水在固体、液体、气体是三种状态,但是展现在我们面前的确实不同的感觉。通过改变水的状态,就可以更改它的展现方式。
应用场景
1 当一个对象的行为,取决于它的状态时
2 当类结构中存在大量的分支,并且每个分支内部的动作抽象相同,可以当做一种状态来执行时。
模式结构
Context 环境角色,里面包含状态对象
class Context{ private State state; public void setState(State state) { this.state = state; } public void operation(){ state.operation(); }}
State 状态的抽象接口
interface State{ public void operation();}
ConcreteState 具体的状态角色
class ConcreteState1 implements State{ public void operation(){ System.out.println("state1 operation"); }}class ConcreteState2 implements State{ public void operation(){ System.out.println("state2 operation"); }}class ConcreteState3 implements State{ public void operation(){ System.out.println("state3 operation"); }}
全部代码
1 package com.xingoo.test.design.state; 2 class Context{ 3 private State state; 4 public void setState(State state) { 5 this.state = state; 6 } 7 public void operation(){ 8 state.operation(); 9 }10 }11 interface State{12 public void operation();13 }14 class ConcreteState1 implements State{15 public void operation(){16 System.out.println("state1 operation");17 }18 }19 class ConcreteState2 implements State{20 public void operation(){21 System.out.println("state2 operation");22 }23 }24 class ConcreteState3 implements State{25 public void operation(){26 System.out.println("state3 operation");27 }28 }29 public class Client {30 public static void main(String[] args) {31 Context ctx = new Context();32 State state1 = new ConcreteState1();33 State state2 = new ConcreteState2();34 State state3 = new ConcreteState3();35 36 ctx.setState(state1);37 ctx.operation();38 39 ctx.setState(state2);40 ctx.operation();41 42 ctx.setState(state3);43 ctx.operation();44 }45 }
运行结果
state1 operationstate2 operationstate3 operation
【设计模式】—— 状态模式State
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。