java设计模式之状态模式

怼烎@ 2023-07-14 10:52 16阅读 0赞

一、解释说明

状态模式就是把对象与行为的对应关系抽象成模板,容器只聚合此模板,就可以根据状态来控制所有的行为。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTE4MzI5MjU_size_16_color_FFFFFF_t_70

二、案例代码

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTE4MzI5MjU_size_16_color_FFFFFF_t_70 1

  1. 用例图

1、状态与行为抽象成的模板,代码如下

  1. package 设计模式.状态模式;
  2. /**
  3. * 状态与行为的抽象模板
  4. */
  5. public interface State {
  6. //状态对应的行为方法
  7. public void doSomething();
  8. }

2、愉快状态的行为类,代码如下

  1. package 设计模式.状态模式;
  2. //愉快状态时候的行为
  3. public class HappyState implements State {
  4. @Override
  5. public void doSomething() {
  6. System.out.println("去唱歌、泡妞");
  7. }
  8. }

3、生气状态的行为类,代码如下

  1. package 设计模式.状态模式;
  2. //生气时候对应的行为
  3. public class AngryState implements State{
  4. @Override
  5. public void doSomething() {
  6. System.out.println("去喷人、睡觉、捶墙");
  7. }
  8. }

4、小克马容器类,代码如下

  1. package 设计模式.状态模式;
  2. //小克马(人),可以根据传入的状态来控制行为
  3. public class Xkm {
  4. //把模板聚合进来,就可以掌握一切了
  5. private State state;
  6. //传入状态,这样传入的话,便于扩展
  7. public void setState(State state){
  8. this.state = state;
  9. this.state.doSomething();
  10. }
  11. }

5、客户端调用类,代码如下

  1. package 设计模式.状态模式;
  2. public class Client {
  3. public static void main(String[] args) {
  4. //拿到小克马这个容器
  5. Xkm xkm = new Xkm();
  6. //把生气状态给小克马这个容器,就可以调用改状态下对应的行为了
  7. xkm.setState(new AngryState());
  8. //把高兴状态给小克马这个容器,就可以调用改状态下对应的行为了
  9. xkm.setState(new HappyState());
  10. //这样的话,到时候可以修改每个状态的行为,而不会影响主类;而且可以添加无数个状态
  11. }
  12. }

三、适用场景

1、行为随状态改变而改变的的场景,例如权限设计,人员对象权限不同执行相同的行为其结果也会不同。
2、条件、分支判断语句替代者,通过扩展子类实现条件判断处理。

四、优缺点

1、优点

●1)结构清晰,避免了程序的复杂,提高了系统可维护性。
●2)遵循了设计原则。很要的体现了开闭原则和单一职责原则,每个状态都是一个子类,与单一职责原则高度符合,扩展状态只需增加子类,正是开闭原则的体现。封装性与迪米特法则也非常吻合。

2、缺点

如果一个事务有很多个状态,就会造成子类太多的问题。需要在项目使用时来衡量是否使用状态模式。

发表评论

表情:
评论列表 (有 0 条评论,16人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java设计模式状态模式

    一、解释说明 状态模式就是把对象与行为的对应关系抽象成模板,容器只聚合此模板,就可以根据状态来控制所有的行为。 ![watermark_type_ZmFuZ3poZW5na

    相关 设计模式状态模式

    一.什么是状态模式? 状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了这个类. 二.什么时候使用状态模式? 状态模式主要解决的是当控制

    相关 设计模式状态模式

    在软件开发过程中,应用程序中的部分对象可能会根据不同的情况作出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。 状态模式:对有

    相关 设计模式状态模式

    状态模式定义:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。 优点: 1、结构清晰,避免使用过多的switch……case或者if……else语句,避

    相关 设计模式状态模式

    定义:又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看

    相关 java设计模式状态模式

    一、状态模式简介 在很多情况下,一个对象的行为取决于它的一个或多个变化的属性,这些属性我们称之为状态,这个对象称之为状态对象。对于状态对象而已,它的行为依赖于它的状态,比如

    相关 设计模式状态模式

    . 模式定义 ​ 在很多情况下,一个对象的行为取决于它的一个或多个变化的属性,这些属性我们称之为状态,这个对象称之为状态对象。对于状态对象而已,它的行为依赖于它的状态,