1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| package eternal.fire;
import java.math.BigDecimal;
public class Main { public static void main(String[] args) { HandlerChain handlerChain = new HandlerChain(); handlerChain.addHandler(new ManagerHandler()); handlerChain.addHandler(new DirectorHandler()); handlerChain.addHandler(new CEOHandler()); handlerChain.process(new Request("Doomfist", new BigDecimal(123123))); handlerChain.process(new Request("tracer", new BigDecimal(1231231))); } } package eternal.fire;
import java.util.LinkedList; import java.util.List;
public class HandlerChain { List<Handler> handlerList = new LinkedList<>();
public void addHandler(Handler handler) { this.handlerList.add(handler); } public boolean process(Request request) { for (var handler : handlerList) { Boolean result = handler.process(request); if (result != null) { if (result) { System.out.println(request + " Approved by " + handler.getClass().getSimpleName()); } else { System.out.println(request + " Denied by " + handler.getClass().getSimpleName()); } return result; } } throw new RuntimeException("idk"); }
} package eternal.fire;
import java.math.BigDecimal;
public class Request { private String name; private BigDecimal amount;
public Request(String name, BigDecimal amount) { this.name = name; this.amount = amount; } public String getName() { return name; } public void setName(String name) { this.name = name; } public BigDecimal getAmount() { return amount; } public void setAmount(BigDecimal amount) { this.amount = amount; } @Override public String toString() { return "Request:" + this.name + "," + this.amount; }
} package eternal.fire;
public interface Handler {
Boolean process(Request request); } package eternal.fire;
import java.math.BigDecimal;
public class ManagerHandler implements Handler{ @Override public Boolean process(Request request) { return request.getAmount().compareTo(BigDecimal.valueOf(1000)) > 0 ? null : !request.getName().equals("Doomfist"); } }
|