定义一个自行车类,自行车可以通过变挡来提速(变速车,假设一共三档)
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
挡速不能再低了!