Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1323419
  • 博文数量: 185
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 3934
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 13:11
个人简介

iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕

文章分类

全部博文(185)

文章存档

2014年(4)

2013年(181)

分类: 项目管理

2013-07-26 10:45:20

概述

    定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

适用性

    1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。

    2.一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。
      这个状态通常用一个或多个枚举常量表示。
      通常,有多个操作包含这一相同的条件结构。
      State模式将每一个条件分支放入一个独立的类中。
      这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。
			

参与者

    1.Context
      定义客户感兴趣的接口。
      维护一个ConcreteState子类的实例,这个实例定义当前状态。

    2.State
      定义一个接口以封装与Context的一个特定状态相关的行为。

    3.ConcreteStatesubclasses
      每一子类实现一个与Context的一个状态相关的行为。

类图


示例


  1. package com.sql9.actioned;  
  2.   
  3. /** 
  4.  * 状态模式示例 
  5.  * @author sean 
  6.  */  
  7.   
  8. interface FileState {  
  9.     String getState();  
  10. }  
  11.   
  12. class OpenState implements FileState {  
  13.   
  14.     @Override  
  15.     public String getState() {  
  16.         return "File is open";  
  17.     }  
  18. }  
  19.   
  20. class ClosedState implements FileState {  
  21.   
  22.     @Override  
  23.     public String getState() {  
  24.         return "File is closed";  
  25.     }  
  26. }  
  27.   
  28. class ReadState implements FileState {  
  29.   
  30.     @Override  
  31.     public String getState() {  
  32.         return "File is reading";  
  33.     }  
  34. }  
  35.   
  36. class WriteState implements FileState {  
  37.   
  38.     @Override  
  39.     public String getState() {  
  40.         return "File is writing";  
  41.     }  
  42. }  
  43.   
  44. class FileContext {  
  45.     private FileState state;  
  46.     public void setFileState(FileState state) {  
  47.         this.state = state;  
  48.     }  
  49.     public FileState getFileState() {  
  50.         return this.state;  
  51.     }  
  52.       
  53.     public String state() {  
  54.         return state.getState();  
  55.     }  
  56. }  
  57.   
  58.   
  59. public class StateTest {  
  60.   
  61.     public static void main(String[] args) {  
  62.         FileContext ctx1 = new FileContext();  
  63.         ctx1.setFileState(new OpenState());  
  64.         System.out.println(ctx1.state());  
  65.         System.out.println("------------");  
  66.           
  67.         ctx1.setFileState(new WriteState());  
  68.         System.out.println(ctx1.state());  
  69.         System.out.println("------------");  
  70.           
  71.         ctx1.setFileState(new ReadState());  
  72.         System.out.println(ctx1.state());  
  73.         System.out.println("------------");  
  74.           
  75.         ctx1.setFileState(new ClosedState());  
  76.         System.out.println(ctx1.state());  
  77.         System.out.println("------------");  
  78.           
  79.     }  
  80.   
  81. }  



结果


  1. File is open  
  2. ------------  
  3. File is writing  
  4. ------------  
  5. File is reading  
  6. ------------  
  7. File is closed  
  8. ------------  

阅读(1923) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~