职责链模式
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
责任链模式并不创建责任链,责任链的创建必须由系统的其他部分创建 责任链模式不指定责任链的拓扑结构,一个链可以使一条线、一个树,也可以是一个环;链的拓扑结构可以是单连通或多连通 责任链模式要求在同一个时间里,命令只可以传给一个下家(或处理掉),不可以传给多个下家 在一个责任链上可以传递数个命令
public class Request {
}
public class LeaveRequest extends Request {
}
public class DimissionRequest extends Request {
}
public class AddMoneyRequest extends Request {
}
public interface RequestHandle {
void handleRequest ( Request request) ;
}
public class HRRequestHandle implements RequestHandle {
@Override
public void handleRequest ( Request request) {
if ( request instanceof DimissionRequest ) {
System . out. println ( "要离职,人事审批..." ) ;
}
System . out. println ( "请求完毕..." ) ;
}
}
public class PMRequestHandle implements RequestHandle {
RequestHandle requestHandle;
public PMRequestHandle ( RequestHandle rh) {
this . requestHandle = rh;
}
@Override
public void handleRequest ( Request request) {
if ( request instanceof AddMoneyRequest ) {
System . out. println ( "要加薪,项目经理审批..." ) ;
} else {
requestHandle. handleRequest ( request) ;
}
}
}
public class TLRequestHandle implements RequestHandle {
RequestHandle requestHandle;
public TLRequestHandle ( RequestHandle requestHandle) {
this . requestHandle = requestHandle;
}
@Override
public void handleRequest ( Request request) {
if ( request instanceof LeaveRequest ) {
System . out. println ( "要请假,项目组长审批..." ) ;
} else {
requestHandle. handleRequest ( request) ;
}
}
}
public class Main {
public static void main ( String [ ] args) {
RequestHandle hr = new HRRequestHandle ( ) ;
RequestHandle pm = new PMRequestHandle ( hr) ;
RequestHandle tl = new TLRequestHandle ( pm) ;
Request request = new DimissionRequest ( ) ;
tl. handleRequest ( request) ;
System . out. println ( "===========" ) ;
request = new AddMoneyRequest ( ) ;
tl. handleRequest ( request) ;
System . out. println ( "===========" ) ;
request = new DimissionRequest ( ) ;
pm. handleRequest ( request) ;
}
}