设计模式——状态模式

来源:互联网 发布:sql语句转换成linq 编辑:程序博客网 时间:2024/05/21 07:05

      状态模式可以使对象状态发生改变时,体现不同的行为。

  用一句话来表述,状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。

可以举例说明,代码如下:

//抽象状态类abstract class Animal{public abstract void run();}//状态类class Tiger extends Animal{public void run(){System.out.println("a tiger is running");}}//状态类class Lion extends Animal{public void run(){System.out.println("a lion is running");}}class Scene {private Animal ani = new Tiger();//向上转型,利用多态//状态切换public void change(){ani = new Lion();}//执行行为public void act(){ani.run();}}public class Demo1{public static void main(String[] args) {Scene scene = new Scene();scene.act();scene.change();scene.act();}}
       类Scene中包含一个状态字段,对应一个抽象的状态对象。有2个状态对象Tiger和Lion继承它,并定义了各自不同的行为。行为执行时,由于发生多态,状态对象改变时,行为也发生了改变。

程序输出结果如下:

a tiger is runninga lion is running

总结:

       用继承表达行为间的差异,用字段表达状态上的变化。上例中Tiger与Lion分别通过继承实现了不同的行为,而Scene中通过字段的重新赋值实现了状态的改变,最终得到我们想要的效果。