Java设计模式设计模式

《设计模式》状态模式

2019-08-09  本文已影响3人  敏捷Studio

定义

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

介绍

UML类图

状态模式UML类图

角色说明:

实现

继续以举追妹纸为例,单身狗状态下与恋爱状态下的行为是不一致的。

1、创建抽象状态类。定义公共接口,比如定义一个人的行为有看电影和逛街:

public interface PersonState {
  void movies();
  void shopping();
}

2、创建具体状态类。实现抽象状态类的接口,比如人有单身狗和恋爱这两种状态:

// 单身狗状态
public class DogState implements PersonState {
  @Override
  public void movies() {
    System.out.println("一个人偷偷看岛国大片");
  }

  @Override
  public void shopping() {
    // 空实现(单身狗逛毛街啊)
  }
}

// 恋爱状态
public class LoveState implements PersonState {
  @Override
  public void movies() {
    System.out.println("一起上电影院看大片~");
  }

  @Override
  public void shopping() {
    System.out.println("一起愉快的逛街去~");
  }
}

3、创建环境类。定义客户端需要的接口,以及负责状态的切换:

public class Context {
  private PersonState mPersonState;
  
  public void setPersonState(PersonState personState) {
    mPersonState = personState;
  }

  public void fallInLove() {
    System.out.println("恋爱了,陷入热恋状态:");
    setPersonState(new LoveState());
  }

  public void disappointmentInLove() {
    System.out.println("失恋了,变成单身狗状态:");
    setPersonState(new DogState());
  }

  public void movies() {
    mPersonState.movies();
  }

  public void shopping() {
    mPersonState.shopping();
  }
}

4、测试方法

public void test() {
  Context context = new Context();
  context.fallInLove();
  context.shopping();
  context.movies();
  context.disappointmentInLove();
  context.shopping();
  context.movies();
}

输出结果:

恋爱了,陷入热恋状态:
一起愉快的逛街去~
一起上电影院看大片~
失恋了,变成单身狗状态:
一个人偷偷看岛国大片

应用场景

优缺点

优点

缺点

上一篇 下一篇

猜你喜欢

热点阅读