AbstractHandler process, , : setNextHandler Handler Handler handle, . - AbstractHandler: InitiatorHandler, PriorityHandler ToHandler, process. InitiatorHandler process true, , , boss. PriorityHandler process true, 10 (.. 0 , 10 true). ToHandler process true, to support. SampleContext from, to, priority msg. ChainPatternDemo Chain of Responsibility : , (support) (boss) 0 10.
AbstractHandler.java
package by.bsac.patterns.chainofresponsibility;
public abstract class AbstractHandler {
// next element in chain or responsibility
protected AbstractHandler nextHandler;
public void setNextHandler(AbstractHandler nextHandler) {
this.nextHandler = nextHandler;
}
public boolean handle(SampleContext context) {
boolean processedChain = process(context);
if (processedChain && nextHandler!= null) {
processedChain = nextHandler.handle(context);
}
return processedChain;
}
abstract protected boolean process(SampleContext context);
}
InitiatorHandler.java
package by.bsac.patterns.chainofresponsibility;
public class InitiatorHandler extends AbstractHandler {
private String initiator = "boss";
@Override
protected boolean process(SampleContext context) {
boolean result = context.getFrom().equalsIgnoreCase(initiator);
System.out.println(this.getClass() + ": result = " + result);
return result;
}
}
PriorityHandler.java
package by.bsac.patterns.chainofresponsibility;
public class PriorityHandler extends AbstractHandler {
//process only if context.priority < priorityLevel
private int priorityLevel = 10;
@Override
protected boolean process(SampleContext context) {
boolean result = context.getPriority() < priorityLevel;
System.out.println(this.getClass() + ": result = " + result);
return result;
}
}
ToHandler.java
package by.bsac.patterns.chainofresponsibility;
public class ToHandler extends AbstractHandler {
private String validTo = "support";
@Override
protected boolean process(SampleContext context) {
boolean result = validTo.equalsIgnoreCase(context.getTo());
|
|
System.out.println(this.getClass() + ": result = " + result);
return result;
}
}
SampleContext.java
package by.bsac.patterns.chainofresponsibility;
public class SampleContext {
public String from;
public String to;
public int priority;
public String msg;
public SampleContext(String from, String to, int priority, String msg) {
this.from = from;
this.to = to;
this.priority = priority;
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority = priority;
}
}
ChainPatternDemo.java
package by.bsac.patterns.chainofresponsibility;
public class ChainPatternDemo {
private static AbstractHandler getChainOfLoggers() {
AbstractHandler initiatorHandler = new InitiatorHandler();
AbstractHandler toHandler = new ToHandler();
AbstractHandler priorityHandler = new PriorityHandler();
priorityHandler.setNextHandler(initiatorHandler);
initiatorHandler.setNextHandler(toHandler);
return priorityHandler;
}
public static void main(String[] args) {
SampleContext context = new SampleContext("boss", "support", 1, "Fix security system!");
AbstractHandler handlerChain = getChainOfLoggers();
boolean validContext = handlerChain.handle(context);
if (validContext) {
System.out.println(context.msg);
}
}
}
4. :
:
1. Factory ( ), FileLogger ( 5 , , ).
2. Chain of Responsibility , .