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();
    }
    
    
  • 相关阅读:
    Linux监控内核SNMP计数器
    wireshark使用手册
    【LinuxShell】echo用法详解
    【Coredump】调试之旅
    汇编指令
    从零开始学Java (五)条件选择
    从零开始学Java (四)输入输出
    Dart基础
    树相关
    递归简介
  • 原文地址:https://www.cnblogs.com/A-yes/p/12026928.html
Copyright © 2011-2022 走看看