Java设计模式之--状态模式(State)
2016-06-24 09:39
751 查看
概念:
状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。状态模式有两个要点:1、可以通过改变状态来获得不同的行为。2、外面对状态的知晓。
案例:
某论坛网站主页,根据访问者的身份,显示不同的页面。
先来看类关系图:
详细代码:
首先定义状态接口:其包括一个待实现的方法showPage()
接着定义三种身份状态类,实现上面接口:
游客状态:
会员用户状态:
论坛管理状态:
接着定义访问者类: 内部持有一个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()
相关文章推荐
- Python动态类型的学习---引用的理解
- 二、设计模式——状态模式
- 土人系列AS入门教程 -- 对象篇
- C#托管堆对象实例包含内容分析
- C#实现获取不同对象中名称相同属性的方法
- javascript asp教程第十一课--Application 对象
- PowerShell中使用Out-String命令把对象转换成字符串输出的例子
- VBS教程:对象-正则表达式(RegExp)对象
- C#检查指定对象是否存在于ArrayList集合中的方法
- sql2008启动代理未将对象应用到实例解决方案
- C#编程自学之类和对象
- C++中对象的常引用、动态建立和释放相关知识讲解
- 详解state状态模式及在C++设计模式编程中的使用实例
- C# 设计模式系列教程-状态模式
- php中将一个对象保存到Session中的方法
- php对象和数组相互转换的方法
- PHP中把对象转换为关联数组代码分享
- C#写入对象或集合类型数据到xml文件的方法
- C#利用反射来判断对象是否包含某个属性的实现方法
- ASP.NET中使用Application对象实现简单在线人数统计功能