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

概念

状态模式,又称状态对象模式(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()
 
   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值