12.状态模式

状态模式:把相关的行为局部化,将不同的状态行为分割开来,例如根据每小时判断一些情况(Context类),这样可以定义一个接口,并传入这个情况(传入Context类),可以把不同的条件分别实现这个接口,并分别根据这个传入的情况判断(此模式适合判断条件复杂情况)

/**

* 状态模式

* 关键

* State接口:定义接口,来封装与Context类相关的行为

* Context类(拥有一些判断属性),拥有State的引用,

* 执行判断方法时调用state接口并传入自身作为参数

* @author zbl

*

*/

public class StateCustomer {

public static void main(String[] args) {

Context context = new Context();

context.setHour(0);

context.work();

context.setHour(2);

context.work();

}

}

//状态

interface State{

public void handler(Context context);

}

//状态A

class ConcreteStateA implements State{

@Override

public void handler(Context context) {

//判断是否是状态A的条件

if(context.getHour()==1){

System.out.println("xiixi");

}else{

System.out.println("wuwu");

context.setState(new ConcreteStateB());

}

}

}

//状态B

class ConcreteStateB implements State{

@Override

public void handler(Context context) {

//判断是否是状态A的条件

if(context.getHour()==2){

System.out.println("hahah");

}else{

//context.setState(new ConcreteStateC());

}

}

}

//业务类

class Context{

private State state;

private double hour;//小时(例子)

public Context(){

state = new ConcreteStateA();//初始化时是状态A

}

public double getHour() {

return hour;

}

public void setHour(double hour) {

this.hour = hour;

}

public State getState() {

return state;

}

public void setState(State state) {

this.state = state;

}

public void work(){

state.handler(this);//传入本身情况

}

}

猜你喜欢

转载自blog.csdn.net/littlelittleguai/article/details/84618837