状态模式

一. 什么是状态模式?

举个生活中的例子,你的女(亚)朋(古)友(兽)有老(fen)虎(nu)形态,和兔(kai)子(xin)形态,在不同的形态,对你的表达的爱意的方式也不一样,老虎使用"疯狂抓咬"表达,而兔子形态会使用"萌萌一击"表达.

二. 状态模式的使用场景?

  • 行为随状态改变而改变的场景。
  • 条件、分支语句的代替者。

允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类.

三. 直观的状态模式

将开头的例子,用代码表示一下吧.

  • 创建状态接口

->State.java

public interface State {
    void love();
}
  • 创建实现接口的实体类

->TigerState.java

public class TigerState implements State {
    private String stateName="老虎形态";
    @Override
    public void love() {
        System.out.println("使出疯狂抓咬,让你遍体鳞伤.");
    }
    @Override
    public String toString() {
        return stateName;
    }
}

->Rabbit.java

public class RabbitState implements State {
    private String stateName="兔子形态";
    @Override
    public void love() {
        System.out.println("使出萌萌一击,让你得意洋洋.");
    }
    @Override
    public String toString() {
        return stateName;
    }
}
  • 创建状态转换器
    ->Transformer.java
public class Transformer {
    private String name;
    private State currentSate;

    /**
    * 切换状态
    * @return
    */
    public State transformTo(State state ){
        currentSate=state;
        System.out.println("切换到了"+state.toString());
        return currentSate;
    }

    public void love(){
        currentSate.love();
    }

    public Transformer(String name, State currentSate) {
        this.name = name;
        this.currentSate = currentSate;
        System.out.println("创建了"+currentSate.toString()+"的"+name);
    }
}
  • 创建测试类
public class Test {

    public static void main(String[] args) {
        State state=new RabbitState();
        Transformer gf=new Transformer("亚古兽",state);
        gf.love();
        //亚古兽超进化
        gf.transformTo(new TigerState());
        gf.love();
    }
}

你可能感兴趣的:(状态模式)