设计模式(二十二)——状态模式(State)

78 篇文章 0 订阅
23 篇文章 0 订阅
文章介绍了状态模式的概念,当对象有多个状态并且可能增加时,使用状态模式可以遵循开闭原则。通过将不同状态的行为抽象成接口并由各个状态类实现,使得添加新状态无需修改原有代码。文中以人的心率在不同状态(睡眠、学习、跑步)下的变化为例,展示了如何从使用ifelse或switch转换到采用状态模式来优化代码结构。
摘要由CSDN通过智能技术生成
设计模式(二十二)——状态模式

当对象有多个状态,而且以后可能会增加状态的时候可以用状态模式。

应用场景

人在不同状态下有不同的心率,当前有SLEEP和STUDY两个状态

可以使用if else或者switch判断每一个状态

public class People {
    private String Name;
    private int age;
    public enum peopleState {SLEEP,STUDY};
    private peopleState state;
    //set get
    public People(String name, int age, peopleState state) {
        Name = name;
        this.age = age;
        this.state = state;
    }
    public void PeopleState(peopleState state){
        switch(state){
            case SLEEP:
                System.out.println("睡觉状态,心跳50-70");
                break;
            case STUDY:
                System.out.println("学习状态,心跳60-100");
                break;
        }
    }
}

现在新增一个状态,RUN,如果在以前的代码上进行更改,就不符合开闭原则了

可以使用状态模式:把不同状态的动作抽离出来,然后不同的状态去实现这个接口,这样以后如果有新的状态,就不会去修改原来的代码。

public interface PeopleState {
    public void peopleState(People.peopleState state);
}
public class SleepPeopleState implements PeopleState{
    public void peopleState(People.peopleState state) {
        System.out.println("睡觉状态,心跳50-70");
    }
}
public class StudyPeopleState implements PeopleState{
    public void peopleState(People.peopleState state) {
        System.out.println("学习状态,心跳60-100");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张宜强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值