设计模式之状态模式

写在前面

本文看一种行为型设计模式,状态模式。

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();
}

运输:

--------转换为接单状态--------
商家已经接单,正在处理中...
--------转换为出库状态--------
商品已经出库...
--------转换为运输状态--------
开始运输了。。。

写在后面

参考文章列表

秒懂设计模式之状态模式(State Pattern) 。

你可能感兴趣的:(设计模式,设计模式,状态模式)