State模式学习
来源:互联网 发布:优化排名软件价格 编辑:程序博客网 时间:2024/06/05 08:54
刚开始理解strategy不太好理解(因为看书的时候跑神了),但state比startegy要容易的多!
State模式用作开关的转换,UML图如上,包含:一个接口Istate,几个实现接口的状态类,一个对外开放的状态调节fireSwitch类(对外使用,赞封装的思维!),一个测试类。
IState接口:
public interfaceIState {
publicvoid switchFire(FireSwitch sw);
}
状态类,这里只写一个,其他的都一样只是new出来的状态不同而已,状态总共有:OffState,SmallState,MediumState,LargeState几个是需要进行互相转换的类:
public classLargeState implements IState{
public voidswitchFire(FireSwitch sw) {
sw.setState(newOffState());
System.out.println("offfire");
}}
对外提供功能、调节状态的类FireSwitch:
public classFireSwitch {
private IState current;//接口类对象,用来进行各个状态的转换;
public FireSwitch(){
current = new OffState();//用关闭状态作为初始化的状态;
}
public voidsetState(IState s) {
current = s;//此可用于spring中进行注入,但是好像用处不大,应该对应有个getState,此处略去~
}
public voidswitchFire() {
current.switchFire(this);//进行状态转换,每个状态的转换都写死在各个状态的内部,所以这个只要调用相应状态的switchFire函数就可以进行转换,并且转换到已设定好的状态下!比较死,但是在某种特定情况下还是很好的用,比如手动的微波炉的开火的调节,或者如TCP那样有精准的状态转换的逻辑就很好用,若否,则这个比strategy模式要笨一些,因为其下一状态是写死的,不是向后者一样可以通过用户传参进来进行相应的操作!
}}
测试方法:
@Test//此处因为封装的比较好,所以直接调用fireswitch类即可,而不是需要调用整个IState,及各个状态类;
//所以,若你有接口及其实现类时,要封装一个这样对外使用的类,用起来才会比较舒服!
public voidtestFireSwitch() {
FireSwitchfireSwitch = new FireSwitch();
fireSwitch.switchFire();
fireSwitch.switchFire();
fireSwitch.switchFire();
fireSwitch.switchFire();
}
FireSwitch中的switchFire()调用IState中的switchfire()这种封装有种service与dao层的样子!前、后、中间可以添加其他操作,或者权限的控制,而且对外提供一个整齐的接口:switchfire().很完美!!这种思维一定尽快培养起来!!
- State 模式学习笔记
- State模式学习
- State模式学习笔记
- 设计模式学习21 State
- 设计模式入门学习 状态State模式
- 设计模式之State模式(学习笔记)
- 设计模式学习笔记--状态(State)模式
- State模式(状态模式)学习
- Android学习 StateMachine与State模式
- Android学习 StateMachine与State模式
- Android学习 StateMachine与State模式
- Android学习 StateMachine与State模式
- Android学习 StateMachine与State模式
- Android学习 StateMachine与State模式
- Android学习 StateMachine与State模式(状态机)
- Android学习 StateMachine与State模式
- 设计模式学习笔记--Strategy、State
- Android学习 StateMachine与State模式
- OpenCV学习笔记(四十)——再谈OpenCV数据结构Mat详解
- 面向对象和面向过程的区别
- java 里的 混淆的几种代码
- C++设计模式之一 Proxy模式
- Another application is currently running which is accessing software information
- State模式学习
- 将Java Web 应用部署至 WebSphere 7
- java23中开发模式
- FAT12,FAT16,FAT32,NTFS的差异
- 丢什么别丢身份证
- Opencv外来物检测
- qt for android
- Linux - one command per day--chown
- 将Java Web 应用部署至 WebSphere 7