.


:




:

































 

 

 

 


Chain of Responsibility




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 , .

 





:


: 2016-12-28; !; : 379 |


:

:

, .
==> ...

1562 - | 1365 -


© 2015-2024 lektsii.org - -

: 0.01 .