java中我新增、到账和支出用的同一个接口,新增只用一次,然后走了到账,到账可用两次,支出可多次复用
时间: 2024-02-20 17:58:29 浏览: 16
可以使用状态模式来实现这个功能。首先定义一个操作接口,包含新增、到账和支出三种操作,然后定义不同的状态类,分别表示不同的状态。每个状态类都存储着下一个状态,当执行某个操作时,根据当前状态决定下一个状态是什么,执行对应的操作。
具体实现可以参考以下的代码示例:
```
// 定义操作接口
public interface Operation {
void add();
void pay();
void receive();
}
// 定义新增状态类
public class AddState implements Operation {
private Operation nextState;
public AddState(Operation nextState) {
this.nextState = nextState;
}
@Override
public void add() {
// 执行新增操作
System.out.println("执行新增操作");
// 切换到下一个状态
nextState.receive();
}
@Override
public void pay() {
// 不支持支付操作
System.out.println("新增状态不支持支付操作");
}
@Override
public void receive() {
// 不支持到账操作
System.out.println("新增状态不支持到账操作");
}
}
// 定义到账状态类
public class ReceiveState implements Operation {
private Operation nextState;
private int count;
public ReceiveState(Operation nextState) {
this.nextState = nextState;
this.count = 2; // 可用两次
}
@Override
public void add() {
// 不支持新增操作
System.out.println("到账状态不支持新增操作");
}
@Override
public void pay() {
// 不支持支付操作
System.out.println("到账状态不支持支付操作");
}
@Override
public void receive() {
if(count > 0) {
// 执行到账操作
System.out.println("执行到账操作");
count--;
} else {
// 切换到下一个状态
nextState.pay();
}
}
}
// 定义支出状态类
public class PayState implements Operation {
private Operation nextState;
public PayState(Operation nextState) {
this.nextState = nextState;
}
@Override
public void add() {
// 不支持新增操作
System.out.println("支出状态不支持新增操作");
}
@Override
public void pay() {
// 执行支付操作
System.out.println("执行支付操作");
// 切换到下一个状态
nextState.pay();
}
@Override
public void receive() {
// 不支持到账操作
System.out.println("支出状态不支持到账操作");
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
// 定义状态链
Operation payState = new PayState(null);
Operation receiveState = new ReceiveState(payState);
Operation addState = new AddState(receiveState);
// 设置起始状态
Operation currentState = addState;
// 执行操作
currentState.add();
currentState.pay();
currentState.receive();
currentState.receive();
currentState.pay();
currentState.receive();
}
}
```
在上面的代码中,我们定义了三个状态类,分别是新增状态、到账状态和支出状态,它们都实现了操作接口。每个状态类都存储着下一个状态,当执行某个操作时,切换到下一个状态并执行对应的操作。客户端代码中,我们定义了一个状态链,从新增状态开始执行,依次执行新增、到账、支付、到账、支付、到账操作,最后结束。通过这种方式,我们可以很方便地实现状态切换,并且支持到账操作可复用多次的功能。