写在前面
本文看一种行为型设计模式,状态模式。
1:介绍
1.1:什么时候使用状态设计模式
当一个类的内部的状态不同时,需要执行不同的操作,此时可以考虑使用状态设计模式。
1.2:UML类图
原型设计模式,包含如下元素:
1:State
对象的内部状态,并定义对应状态的操作
2:Context
维护对象的状态State,并根据状态执行不同的操作
3:ConcreteState
具体的状态类
2:实例
源码 。
2.1:场景
物流不同的状态,接单,出库,运输,送货,收货,评价,等,执行不同的操作。
2.2:程序
- 状态接口State
public interface LogisticsState {
void doAction();
}
- 各种state实现类
public class OrderState implements LogisticsState {
@Override
public void doAction() {
System.out.println("商家已经接单,正在处理中...");
}
}
public class ProductOutState implements LogisticsState {
@Override
public void doAction() {
System.out.println("商品已经出库...");
}
}
public class TransportState implements LogisticsState {
@Override
public void doAction() {
System.out.println("开始运输了。。。");
}
}
- Context类
/ context
public class JdLogistics {
// context中维护state
private LogisticsState logisticsState;
public void setLogisticsState(LogisticsState logisticsState) {
this.logisticsState = logisticsState;
}
public LogisticsState getLogisticsState() {
return logisticsState;
}
public void doAction() {
Objects.requireNonNull(logisticsState);
logisticsState.doAction();
}
}
- 客户端类
@Test
public void buyKeyboard() {
//状态的保持与切换者
JdLogistics jdLogistics = new JdLogistics();
System.out.println("--------转换为接单状态--------");
//接单状态
OrderState orderState = new OrderState();
jdLogistics.setLogisticsState(orderState);
jdLogistics.doAction();
System.out.println("--------转换为出库状态--------");
//出库状态
ProductOutState productOutState = new ProductOutState();
jdLogistics.setLogisticsState(productOutState);
jdLogistics.doAction();
System.out.println("--------转换为运输状态--------");
//运输状态
TransportState transportState = new TransportState();
jdLogistics.setLogisticsState(transportState);
jdLogistics.doAction();
}
运输:
--------转换为接单状态--------
商家已经接单,正在处理中...
--------转换为出库状态--------
商品已经出库...
--------转换为运输状态--------
开始运输了。。。