状态模式

状态 state 模式是 GOF23 种模式中的一种,和命令模式一样,也是一种行为模式。

 

一、使用接口 --- 实现类的方式。

    通常命令模式的接口中只有一个方法。

  而状态模式的接口中有 1 个或者多个方法。

1 ,而且,状态模式的实现类的方法,一般返回值;或者是改变实例变量的值。

    也就是说,状态模式一般和对 象的状态有关。

2 ,实现类的方法有不同的功能,覆盖接口中的方法。

3 ,状态模式和命令模式一样,也可以用于消除 if…else 等条件选择语句。

 

二、主要的用途是,作为实例变量,是一个对 象引用。

    1 ,命令模式的主要的使用方式是参 数回调模式。

命令接口作为方法的参数传递进来。然后,在方法体内回调该接口。

   2 ,而状态模式的主要使用方法,是作为实例变量,通过 set 属性方法,或者构造器把状态接口的具体 实现类的实例传递进来。

下面看 state 模式的例子:

//state 接口

public interface State {

// 得到状态

public void getState();

// 改变状态

public void setStateA();

public void setStateB();

 

}

//state 实现类

Public class StateA{

  String state;

  ……

 

 

}

//state 的使用类

Public class Context{

   Private State state;

   Public void setState(State state){

 

}

 

  setStateA(){

……

   State.setStateA();

……

}

……

 

}

 

如果 Context 使用单例模式,那么实例变量的值 state 就不能够保证是单独使用的。

State 模式和 command 模式都是十分常用,粒度比较小的模式,是很多更大型模式的一部分。

基本上, state 模式和 command 模式是十分相似的。只要开发者心中对单例和多例有一个清醒的认识,即使不把它们分为两种模式也没 事。

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