免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1021 | 回复: 0
打印 上一主题 下一主题

该如何实践State模式【转自www.bitsCN.com】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-16 23:07 |只看该作者 |倒序浏览
State模式将对象行为的变化封装成具有统一接口的状态,它与Strategy模式的区别在于任何状态的改变都是定义好的,即“改变行为”的动作由自己来做。
         
下面是自动门的状态图,它描述了“开”与“关”两个状态之间的变化条件。
          feedom.net
         
抽象状态DoorState提供open()和close()两个方法,
package com.zj.doorstate;

public interface DoorState {
    void open();

    void close();
}
Context为AutoDoor,它关联一个DoorState state。
package com.zj.doorstate;

public class AutoDoor {
    private DoorState state;
    private DoorState open = new Open(this);
    private DoorState close = new Close(this);

    public AutoDoor() {
       this.state = open;
    }

    public void setSate(DoorState state) {
       this.state = state;
    }

    public DoorState getOpenState() {
       return open;
    }

    public DoorState getCloseState() {
       return close;
    }

    public void open() {
       state.open();
    }

    public void close() {
       state.close();
    }
}
ConcreteState有两个。
     状态Open
package com.zj.doorstate;

public class Open implements DoorState {
    private AutoDoor door;

    public Open(AutoDoor door) {
       this.door = door;
    }

    public void close() {
       System.out.println("O.K. Door closed.");
       door.setSate(door.getCloseState());
    }

    public void open() {
       System.out.println("Door already opened.");
    }
}
状态Close
package com.zj.doorstate;

public class Close implements DoorState {
    private AutoDoor door;

    public Close(AutoDoor door) {
       this.door = door;
    }

    public void close() {
       System.out.println("Door already closed.");
    }

    public void open() {
       System.out.println("O.K. Door opened.");
       door.setSate(door.getOpenState());
    }
}
由两个具体状态类可知,具体状态之间的转换由它们自身定义。
【转自
www.bitsCN.com


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/99392/showart_1998700.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP