美文网首页
状态模式

状态模式

作者: 会理发的店小二 | 来源:发表于2018-01-23 15:48 被阅读0次

    一. 什么是状态模式?

    举个生活中的例子,你的女(亚)朋(古)友(兽)有老(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();
        }
    }
    

    相关文章

      网友评论

          本文标题:状态模式

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