美文网首页
设计模式-状态模式

设计模式-状态模式

作者: liuzhimi | 来源:发表于2019-04-19 22:56 被阅读0次

    介绍

    状态模式中的行为是由状态来决定的,不同的状态下有不同的行为。
    状态模式与策略模式结构几乎完全一样,但它们的目的、本质却完全不一样。状态模式的行为是平行的、不可替换的;策略模式的行为彼此独立、可相互替换。

    使用场景
    1.一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为。
    2.包含与对象状态相关的大量条件、分支语句。

    优点
    1.封装了转换规则
    2.将状态判断转换成了结构清晰的状态类族。

    缺点
    增加了系统类和对象的个数

    UML类图

    State.jpg

    代码实现

    State.java

    public interface State {
    
        public void doSomething(Controller controller);
    }
    

    On.java

    public class On implements State {
    
        @Override
        public void doSomething(Controller controller) {
            System.out.println("Current state is On");
            controller.setState(this);
        }
    
        public String toString() {
            return "Current state is On";
        }
    }
    

    Off.java

    public class Off implements State {
    
        @Override
        public void doSomething(Controller controller) {
            System.out.println("Current state is Off");
            controller.setState(this);
        }
    
        public String toString() {
            return "Current state is Off";
        }
    }
    

    Controller.java

    public class Controller {
    
        private State state;
        
        public Controller() {
            state = null;
        }
        
        public State getState() {
            return state;
        }
        
        public void setState(State state) {
            this.state = state;
        }
    }
    

    Main.java

    public class Main {
    
        public static void main(String[] args) {
            Controller controller = new Controller();
            
            On on = new On();
            on.doSomething(controller);
            System.out.println(controller.getState().toString());
            
            Off off = new Off();
            off.doSomething(controller);
            System.out.println(controller.getState().toString());
        }
    }
    

    输出:

    Current state is On
    Current state is On
    Current state is Off
    Current state is Off
    

    相关文章

      网友评论

          本文标题:设计模式-状态模式

          本文链接:https://www.haomeiwen.com/subject/yyqhgqtx.html