设计模式第18篇:状态设计模式

一.状态设计模式介绍

  如果我们基于一个对象的状态来改变对象的行为,通常会在该对象中用if else或switch case语句对状态进行分类,当状态增加时还需要修改源码中的if或switch语句,很显然系统耦合性很高,违反的开闭原则。状态设计模式就是用来解决这个问题,通过状态(State)接口的实现以及引用状态的类(Context)来实现松耦合的目标。

二.状态设计模式代码用例

  以电视遥控器为例,电视遥控器上的ON按钮表示打开电视,OFF按钮表示关闭电视。

  1.状态接口State(状态接口只有行为)

interface State {

    public void doAction();
}

  2.具体状态的实现(不同状态对应的不同实现)TVStartState、TVStopState。

class TVStartState implements State {

    @Override
    public void doAction() {
        System.out.println("TV is turned ON");
    }

}

class TVStopState implements State {

    @Override
    public void doAction() {
        System.out.println("TV is turned OFF");
    }

}

  3.引用状态的类TVContext(拥有对状态对象的索引)

class TVContext implements State {

    private State tvState;

    public void setState(State state) {
        this.tvState=state;
    }

    public State getState() {
        return this.tvState;
    }

    @Override
    public void doAction() {
        this.tvState.doAction();
    }

}

  4.测试类

public class StatePatternTest {

    public static void main(String[] args) {
        TVContext context = new TVContext();
        State tvStartState = new TVStartState();
        State tvStopState = new TVStopState();
        
        context.setState(tvStartState);
        context.doAction();
        
        
        context.setState(tvStopState);
        context.doAction();
        
    }

}

  

原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/10298300.html