package com.leitao.demo.design;
/**
* 状态
* @Description: TODO
* @Author LeiTao
* @Date 2023/5/4
* @Version V1.0
**/
public class StatePattern {
public static void main(String[] args) {
Context context = new Context(); //3
System.out.println(context.getState()); //有货
context.Request(); //2
context.Request(); //1
context.Request(); //0
System.out.println(context.getState()); //无货
context.Request(); //购买失败
System.out.println(context.getState()); //有货
context.Request(); //购买成功 5
System.out.println(context.getCount());
}
}
class Context{ //贩卖机
private int count; //库存
private State state;
public Context() {
count = 3;
state = new ConcreteStateA();
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public void Request(){
state.Handle(this);
}
}
interface State{
public void Handle(Context context);
}
class ConcreteStateA implements State { //有货
@Override
public void Handle(Context context) {
int count = context.getCount();
if (count >= 1){
System.out.println("购买成功");
context.setCount(count - 1);
if (context.getCount() == 0){
context.setState(new ConcreteStateB());
}
}else {
System.out.println("购买失败");
}
}
}
class ConcreteStateB implements State { //无货
@Override
public void Handle(Context context) {
if (context.getCount() == 0){
System.out.println("购买失败,等待补货");
context.setCount(5);
System.out.println("补货成功,请重新购买");
context.setState(new ConcreteStateA());
}
}
}