状态模式-《Head First 设计模式》
来源:互联网 发布:淘宝怎么查看快递公司 编辑:程序博客网 时间:2024/05/16 17:23
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是给一个对象封装好的算法族(行为),可以更改算法族(行为)
阅读全文
0 0
- Head First设计模式-状态模式
- 《Head First 设计模式》状态模式
- 《Head First 设计模式》之状态模式
- <Head First 设计模式>:状态模式:GumballMachine
- First-Head 设计模式:状态模式
- Head First设计模式之状态模式
- 状态模式-《Head First 设计模式》
- Head First---状态模式
- Head First 设计模式
- Head-first设计模式
- head first 设计模式
- head first 设计模式
- Head First 设计模式
- 《Head First 设计模式》
- Head First设计模式
- Head First《设计模式》
- 《Head First设计模式》
- Head First设计模式
- Linux基础教程之用户管理
- ExtJs actioncolumn根据grid数据动态显示按钮
- E: 无法获得锁 /var/lib/apt/lists/lock
- thin和oci连接oracle数据库的区别
- javas权威指南学习笔记(3)--语句
- 状态模式-《Head First 设计模式》
- c#使用DsoFramer实现word嵌入(winform版)
- 《大话设计模式》java实现之享元模式
- 驱动开发学习笔记1
- Python中的操作符重载
- java获取网络时间
- linux实用系统命令
- 网狐荣耀版棋牌开发搭建运营中常见问题一问一答,持续更新中
- SpringMVC构造RESTful及SpringMVC使用RESTful风格后对静态资源的处理