行为型模式:状态模式

定义一个自行车类,自行车可以通过变挡来提速(变速车,假设一共三档)

public class Bike {
    GearState gearState;
    public Bike() {
        gearState = new FirstGear(this);
    }

    // 提速
    public void gearUp(){
        gearState.gearUp();
    }
    // 降速
    public void gearDown(){
        gearState.gearDown();
    }
}

定义一个挡位提速和减速的状态抽象类

public abstract class GearState {

    Bike bike;
    public GearState(Bike bike) {
        this.bike = bike;
    }

    public abstract void gearUp();
    public abstract void gearDown();

}

下面是三个挡位的实现:

public class FirstGear extends GearState{

    public FirstGear(Bike bike) {
        super(bike);
    }

    @Override
    public void gearUp() {
        System.out.println("提速:1---->2");
        bike.gearState = new SecondGear(bike);
    }

    @Override
    public void gearDown() {
        System.out.println("挡速不能再低了!");
    }
}
public class SecondGear extends GearState{
    public SecondGear(Bike bike) {
        super(bike);
    }

    @Override
    public void gearUp() {
        System.out.println("提速:2---->3");
        bike.gearState = new ThirdGear(bike);
    }

    @Override
    public void gearDown() {
        System.out.println("降速:2---->1");
        bike.gearState = new FirstGear(bike);
    }
}
public class ThirdGear extends GearState{
    public ThirdGear(Bike bike) {
        super(bike);
    }

    @Override
    public void gearUp() {
        System.out.println("挡速不能再高了!最高3挡!");
    }

    @Override
    public void gearDown() {
        System.out.println("降速:3---->2");
        bike.gearState = new SecondGear(bike);
    }
}

新建一个客户端类测试

public class Client {
    public static void main(String[] args) {
        Bike bike = new Bike();
        //bike.gearDown();
        bike.gearUp();
        bike.gearUp();
        bike.gearUp();
        bike.gearUp();
        bike.gearDown();
        bike.gearDown();
        bike.gearDown();
    }
}

打印结果:

提速:1---->2
提速:2---->3
挡速不能再高了!最高3挡!
挡速不能再高了!最高3挡!
降速:3---->2
降速:2---->1
挡速不能再低了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值