码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式--状态模式

时间:2015-05-24 23:10:44      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

STATE?跟MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,对你没兴趣的MM就会说“有事情啦”,对你不讨厌但还没喜欢上的MM就会说“好啊,不过可以带上我同事么?”,已经喜欢上你的MM就会说“几点钟?看完电影再去泡吧怎么样?”,当然你看电影过程中表现良好的话,也可以把MM的状态从不讨厌不喜欢变成喜欢哦。   状态模式:状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。

 
其实就是在不同类中改变类的行为,对象的行为封装在各个子类的方法里面,这个子类的行为方法来自抽象的父类或者接口的方法的不同实现。对象的行为根据对象的改变,行为发生改变。
 
举例子说明:
State.java
  1. 1 package com.soyoungboy.state;
    2 publicinterfaceState{
    3 /**
    4 * 状态对应的处理
    5 */
    6 publicvoid handle(String sampleParameter);
    7 }

     

GrilA.java
  1. 1 package com.soyoungboy.state;
    2 publicclassGrilAimplementsState{
    3 @Override
    4 publicvoid handle(String sampleParameter){
    5 System.out.println("GrilA want to see :"+ sampleParameter);
    6 }
    7 }

     

GrilB.java
  1. 1 package com.soyoungboy.state;
    2 publicclassGrilBimplementsState{
    3 @Override
    4 publicvoid handle(String sampleParameter){
    5 System.out.println("GrilB not want to see :"+ sampleParameter);
    6 }
    7 }

     

Context.java
  1.  1 package com.soyoungboy.state;
     2 publicclassContext{
     3 // 持有一个State类型的对象实例
     4 privateState state;
     5 publicvoid setState(State state){
     6 this.state = state;
     7 }
     8 /**
     9 * 用户感兴趣的接口方法
    10 */
    11 publicvoid request(String sampleParameter){
    12 // 转调state来处理
    13 state.handle(sampleParameter);
    14 }
    15 }

     

StateModel.java --根据对象的不同,所产生的行为(request的产生结果不同)。
  1.  1 package com.soyoungboy.state;
     2 publicclassStateModel{// 状态模式
     3 publicstaticvoid main(String[] args){
     4 test();
     5 }
     6 publicstaticvoid test(){
     7 // 创建状态
     8 State state =newGrilB();
     9 State state1 =newGrilA();
    10 // 创建环境
    11 Context context =newContext();
    12 // 将状态设置到环境中
    13 context.setState(state);
    14 // 请求
    15 context.request("firm");
    16 context.setState(state1);
    17 // 请求
    18 context.request("firm");
    19 }
    20 }

     

 
结果:
GrilB not want to see :firm
GrilA want to see :firm
 



设计模式--状态模式

标签:

原文地址:http://www.cnblogs.com/androidsuperman/p/d03f7ee15be7894ae1bf6fe2e18dddbf.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!