JAVA设计模式-State

    技术2022-05-20  31

        一个对像有不同的状态,不同的状态有不同的行为。也许你会说在方法里加上switch case语句就行了,这样的确能实现这样的方法,但是,就像前面一些设计模式的目的一样,这种方法不具可扩展性,因此我们需要一种设计模式来实现这个功能,并且需要提供可扩展性,因此,就有了状态模式。

     

        来看一个例子:

     

        package state; interface State { public void fire(); } class NormalState implements State { public void fire() { System.out.println("普通状态每秒开枪1次。"); } } class ExcitedState implements State { public void fire() { System.out.println("兴奋状态每秒开枪2次。"); } } class Marine { private State state; public Marine(State state){ this.state = state; } public void setState(State state) { this.state = state; } // fire()方法,实际调用的是state变量的fire()方法: public void fire() { state.fire(); } } public class Test{ public static void main(String[] args) { Marine marine = new Marine(new NormalState()); // 创建一个机枪兵的实例: marine.fire(); // 调用fire()方法: marine.setState(new ExcitedState()); // 设置为兴奋状态: marine.fire(); // 再调用fire()方法: } }

     

        在这个例子里面,士兵有两个状态。不同的状态,fire()方法是不同的,真正的fire()方法是定义在状态里的,因此,士兵类里的fire()方法只需要调用state.fire()就行了。这样设计的好处,就是让系统具有了可扩展性,当士兵有了新的状态的时候,只需要实现一个新的继承与State类的类就行了。那么士兵就自动具有了这个状态,不需要改动原有的代码。

     

        运行结果为:

     

    普通状态每秒开枪1次。兴奋状态每秒开枪2次。


    最新回复(0)