zoukankan      html  css  js  c++  java
  • 设计模式-状态模式

    状态模式是针对系统的状态转换的,其主要的定义如下:

    状态模式:允许对象在内部状态改变时改变他的行为,对象看起来好像修改了它的类。

    为了方便状态转移 我们为状态定义一个通用的接口,然后每一种状态都实现这个接口,而在系统类中,通过构造函数,将系统本身传入状态类中,这样,每一种状态的改变,都可以在自己类的内部完成,同时提高了可扩展性:

    public interface State{
        public void des();
        public void action();
    }
    public class State1 implements State{
        Sys sys;
        public Sate1(Sys s)
        {
            this.sys=sys;
        }
        public void des(){
            .../ implements
        }
        public void action(){
            .../ change the state
            sys.setState(s.getState2());
        }
    }
    public class State2 implements State{
        Sys sys;
        public Sate2(Sys s)
        {
            this.sys=sys;
        }
        public void des(){
            .../ implements
        }
        public void action(){
            .../ change the state
            sys.setState(s.getState1());
        }
    }
    public class Sys {
        private State1 state1;
        private State2 state2;
        private State state;//record the system's state
        ....//state1 & state2's setter & getter
        public Sys(State state)
        {
            this.state=state;
        }
        public void setState(State state)
        {    
            this.state=state;
        }    
        public void aciton()
        {
            state.action();
        }
    }

    虽然在实现上 状态模式和策略模式以及模板方法有些相似 但是几个设计模式完全不一样,策略模式是将可以互换的行为封装起来,然后使用委托的方法决定使用哪一个行为,模板方法则是由子类决定具体的如何实现算法中的某些步骤,而算法的流程是给定的,而状态模式则封装的是基于状态的行为,并将行为委托到当前状态,由当前状态来决定具体行为。

  • 相关阅读:
    Arthur J.Riel的61条面向对象设计的经验原则[ZT]
    06年的CS Sub,挺像考研考纲的。。平时学习的时候,可以参考一下~
    Interop时候.Net和Win32对应数据类型
    Asp.Net使用POST方法最简单的实现
    在MasterPage中实现本地化
    最近MS比较High。。。
    语无伦次一下~
    初试Mono~ Virtual Server 果然强大~
    电竟3周年了,纪念一下。。
    又见了点市面~
  • 原文地址:https://www.cnblogs.com/xtestw/p/3960817.html
Copyright © 2011-2022 走看看