设计模式之状态模式

1.状态模式概念

允许对象在其内部状态改变时改变它的行为.

2.状态模式组成

1)Context(上下文)

维护一个对当前状态的引用,并定义了一个接口,允许状态对象改变其行为。

2)State(状态)接口

定义了一个接口,封装了与上下文的一个特定状态相关的行为。

3)Concrete State(具体状态)

实现了状态接口,并定义了与上下文的一个特定状态相关的行为。

3.举个栗子:

例如小久的心情,小久的心情(state)会因为外部的环境影响而改变,

小久==>父母今天多给了100元零花钱==>心情高兴==>心情开心,开心的学习

小久==>今天犯错了,父母批评了小久===>心情伤心==>心情伤心,什么事也不想做

4.代码实现

1)Context实现类

java 复制代码
package org.xiji.state;

/**
 * 人相当于context
 */
public class Person {
    /**
     * 心情
     */
    private MoodState moodState;

    public void setMoodState(MoodState moodState)
    {
        this.moodState = moodState;
    }

    /**
     * 根据心情的不同做事情
     */
    public void doThing()
    {
        moodState.doSomething();
    }

}

2)State

java 复制代码
package org.xiji.state;

/**
 * 心情状态
 */
public interface MoodState {

    void doSomething();
}

3)Concrete State

开心

java 复制代码
package org.xiji.state;

public class Happy implements MoodState{


    @Override
    public void doSomething() {
        System.out.println("心情开心,开心的学习");
    }
}

伤心

java 复制代码
package org.xiji.state;

public class Sad implements MoodState{

    @Override
    public void doSomething() {
        System.out.println("心情伤心,什么事也不想做");
    }
}

4)测试类

java 复制代码
package org.xiji.state;

/**
 * 状态模式测试类
 */
public class StateMain {
    public static void main(String[] args) {

        Person xijiu = new Person();
        Happy happy = new Happy();
        Sad sad = new Sad();


        //父母奖励小久100元 ==>小久心情开心
        System.out.println("小久今天被父母奖励100元,小久心情开心");

        xijiu.setMoodState(happy);
        xijiu.doThing();
        //小久犯错误被父母批评了 ,心情伤心
        System.out.println("小久今天被父母批评了,小久心情伤心");
        xijiu.setMoodState(sad);
        xijiu.doThing();

    }
}

5.运行结果

相关推荐
季鸢1 小时前
Java设计模式之状态模式详解
java·设计模式·状态模式
@yanyu6662 小时前
springboot实现查询学生
java·spring boot·后端
ascarl20102 小时前
准确--k8s cgroup问题排查
java·开发语言
magic 2452 小时前
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
java
爱敲代码的憨仔2 小时前
分布式协同自动化办公系统-工作流引擎-流程设计
java·flowable·oa
纪元A梦3 小时前
分布式拜占庭容错算法——PBFT算法深度解析
java·分布式·算法
卿着飞翔3 小时前
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
java·rabbitmq·java-rabbitmq
陈阿土i3 小时前
SpringAI 1.0.0 正式版——利用Redis存储会话(ChatMemory)
java·redis·ai·springai
安全系统学习3 小时前
【网络安全】Qt免杀样本分析
java·网络·安全·web安全·系统安全
SoFlu软件机器人3 小时前
智能生成完整 Java 后端架构,告别手动编写 ControllerServiceDao
java·开发语言·架构