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

    1、简介

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

      状态模式允许一个对象在其内部状态改变时改变其行为,这个对象看上去就像改变了他的类一样

    2、状态模式类图

    3、状态模式涉及到的角色

      从上图可以看出  状态模式涉及到以下几个角色

      3.1、抽象状态(State)角色:定义一个接口,用以封装环境对象的一个特定的状态所对应的行为

      3.2、具体状态(ConcreteState)角色:每一个具体状态类都实现了环境的一个状态所对应的行为

      3.3、环境(Context)角色:环境角色持有一个状态类的实例,这个状态类的实例给出环境对象的现有状态

    4、源代码

      4.1、抽象状态角色

     
    package State;
    /**
     * ********************************************************    
    * @ClassName: State 
    * @Description: 抽象状态接口
    ***********************************************************
     */
    public interface State {
        String SimpleOperation();
    }
     

      4.2、具体状态角色1

     
    package State;
    /**
     * ********************************************************    
    * @ClassName: ConcreteState 
    * @Description: 具体状态类
    ***********************************************************
     */
    public class Sit implements State{
    
        @Override
        public String SimpleOperation() {
        return    "我坐下了";
        }
    
    }
     

      4.3、具体状态角色2

     
    package State;
    /**
     * ********************************************************    
    * @ClassName: Stand 
    * @Description: 具体状态类
    ***********************************************************
     */
    public class Stand implements State{
    
        @Override
        public String SimpleOperation() {
            return "我站起来了";
        }
    
    }
     

      4.4、环境角色

     
    package State;
    /**
     * ********************************************************    
    * @ClassName: Context 
    * @Description:环境类 环境类持有一个State对象  并把所有的行为委派给此对象
    ***********************************************************
     */
    public class Context {
        private State state;
        
        public State getState() {
            return state;
        }
    
        public void setState(State state) {
            this.state = state;
        }
    
        
        public String stateManage(){
            return state.SimpleOperation();
        }
        
    }
     

      4.5、测试客户端

     
    package State;
    /**
     * ********************************************************    
    * @ClassName: Client 
    * @Description: 状态模式测试客户端
    ***********************************************************
     */
    public class Client {
    
        public static void main(String[] args) {
            Context context = new Context();
            context.setState(new Sit());
            System.out.println(context.stateManage());
            context.setState(new Stand());
            System.out.println(context.stateManage());
        }
    }
  • 相关阅读:
    PAT 乙级 1012 数字分类 (20) C++版
    PAT 乙级 1026 程序运行时间(15) C++版
    PAT 乙级 1009 说反话 (20) C++版
    PAT 乙级 1042 字符统计(20) C++版
    PAT 乙级 1046 划拳(15) C++版
    PAT 乙级 1063 计算谱半径(20) C++版
    CentOS安装oracle12C
    linux端口详解
    yum提示字符编码错误
    securecrt中文乱码
  • 原文地址:https://www.cnblogs.com/lanblogs/p/15175772.html
Copyright © 2011-2022 走看看