設計模式—鏈路模式(實例)
第一步:設置參數dto
/**
* 請求DTO
*/
public class RequestDTO {
}
第二步:設置父類handler
public abstract class ParentHandler {
protected ParentHandler nextHandler;
protected ApplicationContext context = SpringContextUtil.getApplicationContext();
protected abstract boolean needHandler(RequestDTO request);
/**
* 子類handler需重寫該handler()方法
* @param request
*/
protected void handler(RequestDTO request){
ParentHandler handler =this.nextHandler;
while (handler !=null){
if(handler.needHandler(request)){
handler.handler(request);
}
handler =handler.nextHandler;
}
}
/**
* 設置nextHandler
* @param nextHandler
* @return
*/
protected ParentHandler setNextHandler(ParentHandler nextHandler){
this.nextHandler =nextHandler;
return this.nextHandler;
}
}
第三步:設置子類handler
第一個子類handler
public class FirstHandler extends ParentHandler{
@Override
protected boolean needHandler(RequestDTO request) {
return true;
}
@Override
protected void handler(RequestDTO request){
System.out.println("FirstHandler.handler");
//此處只有在firstHandler中添加,其他的子類handler不能添加
super.handler(request);
}
}
第二個子類handler
public class SecondHandler extends ParentHandler {
@Override
protected boolean needHandler(RequestDTO request) {
return true;
}
@Override
protected void handler(RequestDTO request){
System.out.println("SecondHandler.handler");
}
}
第三個子類handler
public class ThirdHandler extends ParentHandler {
@Override
protected boolean needHandler(RequestDTO request) {
return true;
}
@Override
protected void handler(RequestDTO request){
System.out.println("ThirdHandler.handler");
}
}
子類handler按需添加 。。。。。
第四步:設置handler工廠類,main方法測試
public class HandlerFactroy {
private static ParentHandler handlerLinked =new FirstHandler();
static {
handlerLinked
.setNextHandler(new SecondHandler())
.setNextHandler(new ThirdHandler());
}
public static ParentHandler getHandlerLinked(){
return handlerLinked;
}
public static void main(String[] args){
RequestDTO requestDTO =new RequestDTO();
HandlerFactroy.getHandlerLinked().handler(requestDTO);
}
}