java - 设计模式 - 状态模式

文章目录

  • 前言
    • [java - 设计模式 - 状态模式](#java - 设计模式 - 状态模式)
      • [1. 概述](#1. 概述)
      • [2. 作用](#2. 作用)
      • [3. 示例](#3. 示例)

前言

如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。

而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


java - 设计模式 - 状态模式

1. 概述

状态模式是一种行为型设计模式,它允许一个对象在其内部状态发生改变时改变其行为。这使得对象看起来好像修改了它的类。状态模式通常包括以下角色:

  • Context(上下文):它维护一个对当前状态对象的引用,并将客户端的请求委派给当前状态对象来处理;

  • State(状态):状态是一个接口或抽象类,它定义了一个或多个与上下文相关的动作。具体状态类实现这些动作,每个具体状态类代表了上下文的一种状态;

2. 作用

用于在对象的内部状态发生改变时改变对象的行为。这可以帮助你实现多种功能的状态驱动系统。

3. 示例

定义状态接口:

java 复制代码
public interface State {
    void turnOn();
    void turnOff();
}

状态类:

java 复制代码
class OnState implements State{

    @Override
    public void turnOn() {
        System.out.println("已启用,无需在次启用");
    }

    @Override
    public void turnOff() {
        System.out.println("禁用");

    }
}
java 复制代码
class OffState implements State{

    @Override
    public void turnOn() {
        System.out.println("启用");
    }

    @Override
    public void turnOff() {
        System.out.println("已禁用,无需在此禁用");

    }
}

上下文:

java 复制代码
public class StateBulid {
    private State currentState;

    public StateBulid() {
        // 初始状态为关闭
        currentState = new OffState();
    }

    public void setState(State state) {
        currentState = state;
    }

    public void turnOn() {
        currentState.turnOn();
        setState(new OnState());
    }

    public void turnOff() {
        currentState.turnOff();
        setState(new OffState());
    }
}

测试:

java 复制代码
package com.example.demo.designMode.state;

public class StateTest {
    public static void main(String[] args) {
        StateBulid bulb = new StateBulid();

        bulb.turnOn();
        bulb.turnOn();
        bulb.turnOff();
        bulb.turnOff();
    }
}
相关推荐
lssjzmn1 分钟前
Spring Web 异步响应实战:从 CompletableFuture 到 ResponseBodyEmitter 的全链路优化
java·前端·后端·springboot·异步·接口优化
new_daimond14 分钟前
二级缓存在实际项目中的应用
java
一只乔哇噻21 分钟前
java后端工程师进修ing(研一版 || day41)
java·开发语言·学习·算法
User_芊芊君子39 分钟前
【Java】设计模式——单例、工厂、代理模式
java·设计模式·代理模式
2301_803554521 小时前
正向代理,反向代理,负载均衡还有nginx
java·nginx·负载均衡
要开心吖ZSH1 小时前
软件设计师备考-(十六)数据结构及算法应用(重要)
java·数据结构·算法·软考·软件设计师
向上的车轮1 小时前
基于Java Spring Boot的云原生TodoList Demo 项目,验证云原生核心特性
java·spring boot·云原生
程序员清风1 小时前
快手一面:为什么要求用Static来修饰ThreadLocal变量?
java·后端·面试
逍遥德1 小时前
Java8 Comparator接口 和 List Steam 排序使用案例
java·spring boot·list·排序算法
前行的小黑炭1 小时前
Android :如何快速让布局适配手机和平板?
android·java·kotlin