您的位置:首页 > 编程语言 > Java开发

Java设计模式之--状态模式(State)

2016-06-24 09:39 751 查看
概念

状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。状态模式有两个要点:1、可以通过改变状态来获得不同的行为。2、外面对状态的知晓。

案例:

某论坛网站主页,根据访问者的身份,显示不同的页面。

先来看类关系图:



详细代码:

首先定义状态接口:其包括一个待实现的方法showPage()

public interface State {
public void showPage();
}


接着定义三种身份状态类,实现上面接口

游客状态:

public class VisitState implements State {
@Override
public void showPage() {
System.out.println("showVisitPage()");
}
}


会员用户状态:

public class UserState implements State {
@Override
public void showPage() {
System.out.println("showUserPage()");
}
}


论坛管理状态:

public class AdminState implements State {
@Override
public void showPage() {
System.out.println("showAdminPage()");
}
}


接着定义访问者类: 内部持有一个State状态

public class Viewer {
private State state;
public State getState() {
return state;
}

public void setState(State state) {
this.state = state;
}

public Viewer(State state) {
this.state = state;
}

}


最后是网站主页类:持有一个访问者实例

public class WebSiteMainPage {

private Viewer viewer;

public WebSiteMainPage(Viewer viewer) {
this.viewer = viewer;
}

public Viewer getViewer() {
return viewer;
}

public void setViewer(Viewer viewer) {
this.viewer = viewer;
}

public void showPage() {
if (null != getViewer() && null != getViewer().getState()) {
getViewer().getState().showPage();
}
}

}


写测试类,进行测试

public class WorkClass {
public void test() {
WebSiteMainPage webSiteMainPage = new WebSiteMainPage(new Viewer(new VisitState()));
webSiteMainPage.showPage();
//用户身份登录
webSiteMainPage.getViewer().setState(new UserState());
webSiteMainPage.showPage();
//管理员身份登录
webSiteMainPage.getViewer().setState(new AdminState());
webSiteMainPage.showPage();
}
}


测试结果:

I/System.out: showVisitPage()
I/System.out: showUserPage()
I/System.out: showAdminPage()



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息