读书人

设计方式之状态模式笔记

发布时间: 2012-10-28 09:54:44 作者: rapoo

设计模式之状态模式笔记

刚看书看到的,关于一个设计模式的状态模式的不错的讲解,是以QQ的登陆.在线,忙碌,离线四个状态的一个说明,代码如下

状态的接口类:

public interface QQState {
??? void handle(QQ qq);
}


四种不同的状态实现状态接口类


public class LeaveState implements QQState {
??? public void handle(QQ document) {
??//离线状态应该处理代码
??document.setState(new LoginingState());
??System.out.println("QQ正在登录");
??? }
}

?

public class LoginingState implements QQState {
??? public void handle(QQ document) {
??//登录中应该处理代码
??document.setState(new LiningState());
??System.out.println("QQ已在线");
??? }
}

?

public class LiningState implements QQState {
??? public void handle(QQ document) {
??//QQ在线应该处理代码
??document.setState(new BusyState());
??System.out.println("QQ处在忙碌中");
??? }
}

?

public class BusyState implements QQState {
??? public void handle(QQ document) {
??//QQ处在忙碌中应该处理代码
??????? document.setState(new LeaveState());
??System.out.println("QQ已离线");
??? }
}

?


public class LeaveState implements QQState {
??? public void handle(QQ document) {
??//离线状态应该处理代码
??document.setState(new LoginingState());
??System.out.println("QQ正在登录");
??? }
}

public class QQ {
??? public QQ() {
??state = new LeaveState();
??? }

??? private QQState state;
???
??? public QQState getState(){ return state; }

??? public void setState(QQState state){ this.state = state; }
??? public void handle() {
??state.handle(this);
??? }
}

客户端
public class Client {
??? public static void main(String[] argv) {

??QQ qq = new QQ();
??? qq.handle();
??? qq.handle();
??? qq.handle();
??? qq.handle?();

? }
}

读书人网 >软件开发

热点推荐