state状态模式

来源:互联网 发布:土豆网视频下载 mac 编辑:程序博客网 时间:2024/06/17 03:23

在诸多设计模式中,state的模式也是应用的非常广泛的,例如:slidemenu,下拉刷新等状态转移的应用中

 

我们分析一个Door的状态

 

整个源码设计

 

首先是Door类,接着是Door的状态,让后是实现状态的不同行为

 

例如:上面我们的Door肯定有个state变量来标志当前的doorr的状态,而且door肯定有touch的方法,这里应用了java多态性

 

整个代码比较容易理解,而且非常重要

package state;public abstract class DoorState {public final static DoorState CLOSED = new DoorClosed();public final static DoorState CLOSEING = new DoorClosing();public final static DoorState OPEN = new DoorOpen();public final static DoorState OPENING = new DoorOpening();public final static DoorState STAYOPEN = new DoorStayOpen();public abstract DoorState touch();public void complete() {}public abstract DoorState timeout();// 返回状态public String status() {String s = getClass().getName();return s.substring(s.lastIndexOf("."));}}
package state;import java.util.Observable;public class Door2 extends Observable {private DoorState state = DoorState.CLOSED;public void touch(){state = state.touch();}public void complete() {state = state.timeout();}public void timeout() {state = state.timeout();}// 返回状态protected void setStatus(DoorState state) {this.state = state;setChanged();notifyObservers();}}



 

package state;public class DoorClosed extends DoorState {@Overridepublic DoorState touch() {return DoorState.OPENING;}public DoorState timeout() {return DoorState.CLOSED;}}
package state;public class DoorClosing extends DoorState {@Overridepublic DoorState touch() {return DoorState.OPENING;}public DoorState timeout() {return DoorState.CLOSED;}}
package state;public class DoorOpen extends DoorState { @Overridepublic DoorState touch() {return DoorState.STAYOPEN;}public DoorState timeout() {return DoorState.CLOSEING;}}
package state;public class DoorOpening extends DoorState {@Overridepublic DoorState touch() {return DoorState.CLOSEING;}public DoorState timeout() {return DoorState.CLOSED;}}
package state;public class DoorStayOpen extends DoorState {@Overridepublic DoorState touch() {return DoorState.CLOSEING;}@Overridepublic DoorState timeout() {return DoorState.CLOSED;}}



对于complete没有具体实现,自已懂了就可以了


 

 

0 0
原创粉丝点击