状态模式-《Head First 设计模式》
2017-11-27 18:56
309 查看
1-定义
允许一个对象在内部状态改变时改变自己的行为。这个对象就像是改变了他的类。2-结构
State(interface)状态接口Concrete State:具体状态
Context:实例中的GumballMachine,持有各种状态的实例。
context中调用state.handle():进行处理,在不同状态下做不同工作。
3-实例:
1-State和具体状态
public interface State { public void insertQuarrer(); public void ejectQuarter(); public void turnCrank(); public void dispense(); }
四种状态类:继承State
public class HasQuarterState implements State{ @Override public void insertQuarrer() { System.out.println("HasQuarterState-insertQuarrer "); } @Override public void ejectQuarter() { System.out.println("HasQuarterState-ejectQuarter "); } @Override public void turnCrank() { System.out.println("HasQuarterState-turnCrank "); } @Override public void dispense() { System.out.println("HasQuarterState-dispense "); } } public class NoQuarterState implements State{ @Override public void insertQuarrer() { System.out.println("NoQuarterState-insertQuarrer "); } @Override public void ejectQuarter() { System.out.println("NoQuarterState-ejectQuarter "); } @Override public void turnCrank() { System.out.println("NoQuarterState-turnCrank "); } @Override public void dispense() { System.out.println("NoQuarterState-dispense "); } } public class SoldOutState implements State{ @Override public void insertQuarrer() { System.out.println("SoldOutState-insertQuarrer "); } @Override public void ejectQuarter() { System.out.println("SoldOutState-ejectQuarter "); } @Override public void turnCrank() { System.out.println("SoldOutState-turnCrank "); } @Override public void dispense() { System.out.println("SoldOutState-dispense "); } } public class SoldState implements State{ @Override public void insertQuarrer() { System.out.println("SoldState-insertQuarrer "); } @Override public void ejectQuarter() { System.out.println("SoldState-ejectQuarter "); } @Override public void turnCrank() { System.out.println("SoldState-turnCrank "); } @Override public void dispense() { System.out.println("SoldState-dispense "); } }
2-Context:GumballMachine
拥有对象的实例,进行操作,根据状态产生了不同行为。public class GumballMachine { State state; public GumballMachine() { state = new SoldOutState(); } public void insertQuarter() { state.insertQuarrer(); } public void ejectQuarter() { state.ejectQuarter(); } public void turnCrank() { state.turnCrank(); state.dispense(); } public void setState(State state) { this.state = state; } }
3-测试
不同的状态,同样的操作却产生了状态相关的行为。GumballMachine gumballMachine = new GumballMachine(); gumballMachine.setState(new SoldOutState()); gumballMachine.insertQuarter(); gumballMachine.turnCrank(); gumballMachine.setState(new NoQuarterState()); gumballMachine.ejectQuarter(); gumballMachine.turnCrank();
4-State状态模式和Strategy策略模式的异同
1-相同
结构类似2-不同
State状态模式是一个对象的状态改变后,会改变自身的行为Strategy是给一个对象封装好的算法族(行为),可以更改算法族(行为)
相关文章推荐
- Head First 设计模式 --10 状态模式
- 《Head First 设计模式》学习笔记——状态模式
- <Head First 设计模式>:状态模式:GumballMachine
- 《Head First 设计模式》学习笔记——状态模式
- head first 设计模式学习随笔(11)----状态模式
- Head First 设计模式(十)状态模式
- Head First 设计模式 (十) 状态模式(State pattern) C++实现
- 《Head First 设计模式》之状态模式
- 《Head First 设计模式》状态模式
- [状态机]嵌入式设计模式:有限状态自动机的C语言实现
- 《Head First 设计模式》例子的C++实现(3 装饰模式)
- 设计模式开始--状态模式
- 设计模式之状态模式
- 《Head First 设计模式》阅读笔记(五)——单件模式
- PHP设计模式:行为型之状态(State)
- Java设计模式——状态模式(State)
- Head First 设计模式(三)工厂模式
- 设计模式学习--状态模式
- 23设计模式之状态模式(State)
- 设计模式-状态模式