zoukankan      html  css  js  c++  java
  • [一天一个设计模式]-[状态模式]

    状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。

    状态模式和策略模式很相似,

    • 策略模式的每个策略是平等的,所有策略调用者都应该知道,由调用者自己判断选择运用哪个策略
    • 状态模式的每个状态存在转换关系,调用者不用知道所有的状态,状态的转变一般不由调用者主动设置状态

    状态模式包含以下主要角色。

    • 环境(Context)角色:也称为上下文,它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。
    • 抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为。
    • 具体状态(Concrete State)角色:实现抽象状态所对应的行为。

    举个栗子,烧开水,烧的时间越长水的温度越高知道水开

    interface State{
        void state(Pot pot);
    }
    
    class BoilState implements State{
        
        @Override
        public void state(Pot pot){
            sout("water is boil");
        }
    }
    
    class NotBoilState implements State{
        
        @Override
        public void state(Pot pot){
            sout("water is not boil");
        }
    }
    
    class Pot{
        Integer temp=80;
        
        State state; 
        
        public void heatUp(){
            temp+=10;
            if(temp == 100){
                this.state = new BoilState(); 
            }else{
                this.state = new NotBoilState();
            }
            state.state(this);
        }
        
        public void play(){
            state.handle(this);
        }
    }
    
    
    main(){
        Pot pot=new Pot(); 
        
        pot.heatUp();
        pot.heatUp();
        pot.heatUp();
    }
    
    
  • 相关阅读:
    spark 提交任务(指定log4j日志配置)
    linux修改mysql root密码
    清理CDH日志
    hive中解析json数组[转载chenzechao]
    scala 语法 注意点
    excel常用公式
    Eclipse导入Java 的jar包的方法
    函数bsxfun,两个数组间元素逐个计算的二值操作
    函数的定义与调用
    clc和clear命令的使用
  • 原文地址:https://www.cnblogs.com/A-yes/p/12026928.html
Copyright © 2011-2022 走看看