状态模式

1.定义

对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。

2.场景

家里的吹风机有多个档,每个档级对应的风级不一样,可以用下面的代码进行模拟:

public class Blower {

    public void blow() {
        String state = "低档";
        switch (state) {
            case "低档":
                System.out.println("吹冷风");
                break;
            case "中档":
                System.out.println("吹中风");
                break;
            case "高档":
                System.out.println("吹热风");
                break;
            default:
                System.out.println("没有当前档级");
        }
    }
}

缺点:
(1) 存在大量的if else,可读性差
(2) 如果需要增加一个新的档级,就需要修改原有的代码
在这里可将不同的温度段定义为不同的状态,在这些状态中定义不同的行为。

2.1 定义不同的状态

public interface State {

    void show();
}

public class LowState implements State {
    @Override
    public void show() {
        System.out.println("低档 : 吹冷风");
    }
}

public class MiddleState implements State {
    @Override
    public void show() {
        System.out.println("中档: 吹中等风");
    }
}
public class HighState implements State {
    @Override
    public void show() {
        System.out.println("高档 : 吹热风");
    }
}


2.2 状态改变行为

public class Blower {

    private State state;

    Blower(State state){
        this.state = state;
    }

    public void setState(State state) {
        this.state = state;
    }
    
    public void blow() {
        state.show();
    }
}

2.3 测试

public class TestState {
    public static void main(String[] args) {
        Blower blower = new Blower(new HighState());
        blower.blow();
    }
}

----------------------------console
高档 : 吹热风

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值