根据状态决定行为
(有限状态机(FSM))
代码结构
源码
package com.myspringboot.shejimoshi.zhuangtai.mianhua;
public class Main {
public static void main(String[] args) {
Shoes shoes1 = new Shoes(100, 200, new ShoesDismalState());
shoes1.discount();
shoes1.purchase();
Shoes shoes2 = new Shoes(100, 200, new ShoesSellState());
shoes2.discount();
shoes2.purchase();
}
}
package com.myspringboot.shejimoshi.zhuangtai.mianhua;
/**
* 当增加新的动作 、状态时非常不方便
*/
public class Shoes {
private int num;
private int price;
private ShoesState state;
public Shoes(int num, int price, ShoesState state) {
this.num = num;
this.price = price;
this.state = state;
}
public void discount() {
state.discount(num);
}
public void purchase() {
state.purchase(price);
}
}
package com.myspringboot.shejimoshi.zhuangtai.mianhua;
public class ShoesDismalState extends ShoesState {
@Override
void discount(int num) {
System.out.println("进货" + (int) (0.5 * num) + "双");
}
@Override
void purchase(int price) {
System.out.println("一双" + 0.6 * price + "块");
}
}
package com.myspringboot.shejimoshi.zhuangtai.mianhua;
public class ShoesSellState extends ShoesState {
@Override
void discount(int num) {
System.out.println("进货" + (int) (1.6 * num) + "双");
}
@Override
void purchase(int price) {
System.out.println("一双" + 3.1 * price + "块");
}
}
package com.myspringboot.shejimoshi.zhuangtai.mianhua;
public abstract class ShoesState {
abstract void discount(int num);
abstract void purchase(int price);
}