Java中23种面试常考的设计模式之状态模式(State)---行为型模式

简介: Java中23种面试常考的设计模式之状态模式(State)---行为型模式

【Java中23种面试常考的设计模式之状态模式(State)---行为型模式】

知识回顾:
>

之前我们讲过的设计模式在这里呦:
【面试最常见的设计模式之单例模式】
【面试最常见的设计模式之工厂模式】
【Java中23种面试常考的设计模式之备忘录模式(Memento)---行为型模式】
【Java中23种面试常考的设计模式之观察者模式(Observer)---行为型模式】
【Java中23种面试常考的设计模式之模板模式(Template)---行为型模式】
接下来我们要进行学习的是:【Java中23种面试常考的设计模式之状态模式(State)---行为型模式】。

状态模式

状态模式核心思想是:在状态模式中,类的行为是基于它的状态改变的。我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

解决的问题

主要解决的问题:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。

应用状态模式的场景

何时使用:代码中包含大量与对象状态有关的条件语句。

生活中关于状态模式应用的场景

  1. 红绿灯状态;
  2. 网上购物时,订单的状态;
  3. 文件审批状态;
  4. 请假审批状态;
  5. 等等。。。等等。。。。

生产开发中常用的使用场景

  1. OA系统管理;
  2. 线程对象各状态之间的切换;
  3. 酒店中房间状态;
  4. 最近学习了工作流框架Activiti,任务审批过程,主要是用了对象中的状态;
  5. 等等。。。。。等等。。。。

状态模式优点与缺点

优点

  1. 枚举可能的状态,在枚举状态之前需要确定状态种类。
  2. 将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。

缺点

  1. 状态模式的使用必然会增加系统类和对象的个数。
  2. 状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。

核心角色

状态接口类,设置状态类,具体实现类

UML类图

image.png

实现代码

我们举这样一个栗子:模拟一个请假状态流程:1.提交请假 2.审核请假 3.通过请假

状态接口类

package com.state;

public interface State{
   
   

    void handle();
}

具体实现状态类1

package com.state;

public class BeginState implements State{
   
   

    @Override
    public void handle() {
   
   
        // TODO Auto-generated method stub
        System.out.println("此时任务处于提交请假的状态");
    }

}

具体实现状态类2

package com.state;

public class VerifyState implements State{
   
   

    @Override
    public void handle() {
   
   
        // TODO Auto-generated method stub
        System.out.println("此时任务处于审核请假的状态");
    }

}

具体实现状态类3

package com.state;

public class PassState implements State{
   
   

    @Override
    public void handle() {
   
   
        // TODO Auto-generated method stub
        System.out.println("此时任务处于通过请假的状态");
    }

}

设置状态类

package com.state;

public class Context{
   
   

   private State state;

   public void setState(State state){
   
   
      System.out.println("状态修改中。。。。。。");
      this.state = state;     
      state.handle();
   }

   public State getState(){
   
   
      return state;
   }
}

测试代码

package com.state;

public class Main {
   
   

    public static void main(String[] args){
   
   
        Context context=new Context();
        context.setState(new BeginState());
        System.out.println("---------");
        context.setState(new VerifyState());
        System.out.println("---------");
        context.setState(new PassState());
        System.out.println("---------");
    }

}

运行结果展示:

image.png

好了,到这里【Java中23种面试常考的设计模式之状态模式(Strategy)---行为型模式】就结束了,23种设计模式持续更新汇总中。

相关文章
|
19天前
|
设计模式 算法 Java
Java中的设计模式:提升代码质量的秘诀
【8月更文挑战第23天】在Java开发中,设计模式是提高代码可读性、可维护性和扩展性的强有力工具。本文通过浅显易懂的语言和实际案例,探讨几种常见的设计模式及其在Java中的应用,旨在帮助开发者更好地理解并运用这些模式来优化自己的代码结构。
37 2
|
12天前
|
设计模式 缓存 算法
揭秘策略模式:如何用Java设计模式轻松切换算法?
【8月更文挑战第30天】设计模式是解决软件开发中特定问题的可重用方案。其中,策略模式是一种常用的行为型模式,允许在运行时选择算法行为。它通过定义一系列可互换的算法来封装具体的实现,使算法的变化与客户端分离。例如,在电商系统中,可以通过定义 `DiscountStrategy` 接口和多种折扣策略类(如 `FidelityDiscount`、`BulkDiscount` 和 `NoDiscount`),在运行时动态切换不同的折扣逻辑。这样,`ShoppingCart` 类无需关心具体折扣计算细节,只需设置不同的策略即可实现灵活的价格计算,符合开闭原则并提高代码的可维护性和扩展性。
29 2
|
12天前
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
24 1
|
12天前
|
设计模式 Java
重构你的代码:探索Java中的混合、装饰器与组合设计模式
【8月更文挑战第30天】在软件开发中,设计模式为特定问题提供了结构化的解决方案,使代码更易理解、维护及扩展。本文将介绍三种常用的 Java 设计模式:混合模式、装饰器模式与组合模式,并附有示例代码展示实际应用。混合模式允许通过继承多个接口或抽象类实现多重继承;装饰器模式可在不改变对象结构的情况下动态添加新功能;组合模式则通过树形结构表示部分-整体层次,确保客户端处理单个对象与组合对象时具有一致性。
10 1
|
23天前
|
设计模式 算法 安全
Java编程中的设计模式:提升代码的可维护性和扩展性
【8月更文挑战第19天】在软件开发的世界里,设计模式是解决常见问题的一种优雅方式。本文将深入探讨Java编程语言中常用的几种设计模式,并解释如何通过这些模式来提高代码的可维护性和扩展性。文章不涉及具体的代码实现,而是侧重于理论和实践相结合的方式,为读者提供一种思考和改善现有项目的新视角。
|
23天前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
|
23天前
|
设计模式 算法 Java
【十六】设计模式~~~行为型模式~~~策略模式(Java)
文章详细介绍了策略模式(Strategy Pattern),这是一种对象行为型模式,用于定义一系列算法,将每个算法封装起来,并使它们可以相互替换。策略模式让算法独立于使用它的客户而变化,提高了系统的灵活性和可扩展性。通过电影院售票系统中不同类型用户的打折策略案例,展示了策略模式的动机、定义、结构、优点、缺点以及适用场景,并提供了Java代码实现和测试结果。
【十六】设计模式~~~行为型模式~~~策略模式(Java)
|
23天前
|
设计模式 网络协议 Java
【十五】设计模式~~~行为型模式~~~状态模式(Java)
文章详细介绍了状态模式(State Pattern),这是一种对象行为型模式,用于处理对象在其内部状态改变时的行为变化。文中通过案例分析,如银行账户状态管理和屏幕放大镜工具,展示了状态模式的应用场景和设计方法。文章阐述了状态模式的动机、定义、结构、优点、缺点以及适用情况,并提供了Java代码实现和测试结果。状态模式通过将对象的状态和行为封装在独立的状态类中,提高了系统的可扩展性和可维护性。
【十五】设计模式~~~行为型模式~~~状态模式(Java)
|
18天前
|
设计模式 缓存 算法
探索 Java 设计模式及其重要性
【8月更文挑战第24天】
41 0
|
20天前
|
设计模式 SQL 缓存
Java编程中的设计模式:单例模式的深入理解与应用
【8月更文挑战第22天】 在Java的世界里,设计模式是构建可维护、可扩展和灵活的软件系统的基石。本文将深入浅出地探讨单例模式这一经典设计模式,揭示其背后的哲学思想,并通过实例演示如何在Java项目中有效运用。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇洞悉软件设计深层逻辑的大门。
26 0
下一篇
DDNS