美文网首页野生技术宅协会
设计模式(二十一) 状态模式

设计模式(二十一) 状态模式

作者: 乐百川 | 来源:发表于2017-04-05 23:51 被阅读21次

    状态模式也是一种行为型模式,当我们的程序中需要一些状态转换,对于不同的状态需要不同的行为时,我们就可以考虑使用状态模式。

    下面用交通灯来当例子。我们需要红黄绿三种颜色的状态。

    
    interface State {
        void show();
    }
    
    class RedState implements State {
    
        @Override
        public void show() {
            System.out.println("交通灯变红了");
    
        }
    }
    
    class YellowState implements State {
    
        @Override
        public void show() {
            System.out.println("交通灯变黄了");
    
        }
    }
    
    class GreenState implements State {
    
        @Override
        public void show() {
            System.out.println("交通灯变绿了");
    
        }
    }
    

    然后需要交通灯,它作为状态类的环境,内部应该有所有状态类的实例,并能按照某种规则转换状态。

    public class TrafficLight {
        private State redState = new RedState();
        private State yellowState = new YellowState();
        private State greenState = new GreenState();
    
        private State current = greenState;
    
        public void turn() {
            if (current == greenState) {
                current = yellowState;
                current.show();
            } else if (current == yellowState) {
                current = redState;
                current.show();
            } else {
                current = greenState;
                current.show();
            }
        }
    }
    

    然后客户类不需要关心内部状态的变化,就可以使用状态类了。

        public void run() {
            TrafficLight light = new TrafficLight();
            light.turn();
            light.turn();
            light.turn();
            light.turn();
        }
    

    相关文章

      网友评论

        本文标题:设计模式(二十一) 状态模式

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