行为型之状态模式

适用:对象状态影响行为,在不同状态下行为不同,经常需要改变状态来完成不同行为时,类似于多个if-else语句并列使用或switch语句的适用情况.

结构:

1、状态接口,规定了“通过改变状态达到改变行为目的的方法”;
2、具体的状态对象,实现“状态接口”;
3、主题类和状态接口发生关联。

注意:每一个状态对象都必须清楚地知道自己的下一个状态。

要点:
1、State模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时,切换相应对象;但同时维持State的接口,这样实现了具体操作与状态转换之间的解耦。
2、每一个状态对象的职责会更加明确。

接口IState.java

package demo;

public interface IState {
 public void change(Luzi lz);
}

//关闭状态下会响应的行为OffState.java

package demo;


public class OffState implements IState {

 public void change(Luzi lz) {
  lz.setState(new SmallState());//改变炉子的属性
  System.out.println("小火状态时的行为");
 }
}

//小火状态下会响应的行为SmallState.java

package demo;

public class SmallState implements IState {

 public void change(Luzi lz) {
  lz.setState(new LargeState());
  System.out.println("执行大火状态下的行为");
 }

}

//大火状态下会响应的行为LargeState.java

package demo;
public class LargeState implements IState {

 public void change(Luzi lz) {
  lz.setState(new OffState());
  System.out.println("执行关闭状态下的行为");
 }
}

//炉子实体类

package demo;

public class Luzi {
 private IState state = null;//状态

 public Luzi(){
  state = new OffState();//初使时炉子当然是处于关闭状态的
 }

 public void setState(IState state) {
  this.state = state;
 }

 public void push() {//改变状态的行为,从而达到改变行为的目的
  state.change(this);
 }
}

//调用

package demo;

public class TestMain {

 public static void main(String[] args) {
  Luzi lz = new Luzi();
  lz.push();
  lz.push();
  lz.push();
 }
}

结果:

小火状态时的行为
执行大火状态下的行为
执行关闭状态下的行为

 

第一次构造时用关闭的状态去实例化一个炉子,这个炉子的push()方法即为 OffState对象的 change(Luzi lz)方法,而在此change(Luzi )方法中调用了 lz.setState(new SmallState()),这样这个lz对象就被赋值为SmallState对象,这样实现了流程的向下进行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值