java璐d换閾炬ā寮忔€庝箞瀹炵幇
Java涓疄鐜拌矗浠婚摼妯″紡鍙互浣跨敤浠ヤ笅姝ラ锛?/p>
- 瀹氫箟涓€涓娊璞$殑澶勭悊鍣紙Handler锛夌被锛岃绫诲寘鍚竴涓寚鍚戜笅涓€涓鐞嗗櫒鐨勫紩鐢ㄥ拰涓€涓鐞嗚姹傜殑鏂规硶銆傝鏂规硶鍙互鏍规嵁鍏蜂綋闇€姹傝繘琛屽鐞嗭紝濡傛灉闇€瑕佸皢璇锋眰浼犻€掔粰涓嬩竴涓鐞嗗櫒锛屽垯璋冪敤涓嬩竴涓鐞嗗櫒鐨勫鐞嗘柟娉曘€?/li>
public abstract class Handler {
protected Handler nextHandler;
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void handleRequest(Request request);
}
- 瀹氫箟鍏蜂綋鐨勫鐞嗗櫒绫伙紝缁ф壙鑷娊璞″鐞嗗櫒绫伙紝骞跺疄鐜板鐞嗚姹傜殑鏂规硶銆傚湪鍏蜂綋澶勭悊鍣ㄤ腑鍒ゆ柇鏄惁婊¤冻澶勭悊璇锋眰鐨勬潯浠讹紝濡傛灉婊¤冻鍒欒繘琛屽鐞嗭紝鍚﹀垯灏嗚姹備紶閫掔粰涓嬩竴涓鐞嗗櫒銆?/li>
public class ConcreteHandlerA extends Handler {
@Override
public void handleRequest(Request request) {
if (request.getType() == RequestType.TYPE_A) {
// 澶勭悊璇锋眰鐨勯€昏緫
System.out.println("ConcreteHandlerA handles request: " + request);
} else if (nextHandler != null) {
// 灏嗚姹備紶閫掔粰涓嬩竴涓鐞嗗櫒
nextHandler.handleRequest(request);
}
}
}
public class ConcreteHandlerB extends Handler {
@Override
public void handleRequest(Request request) {
if (request.getType() == RequestType.TYPE_B) {
// 澶勭悊璇锋眰鐨勯€昏緫
System.out.println("ConcreteHandlerB handles request: " + request);
} else if (nextHandler != null) {
// 灏嗚姹備紶閫掔粰涓嬩竴涓鐞嗗櫒
nextHandler.handleRequest(request);
}
}
}
// 鍏朵粬鍏蜂綋澶勭悊鍣ㄧ被鐨勫畾涔?..
- 瀹氫箟涓€涓姹傜被锛岀敤浜庡皝瑁呰姹傜殑淇℃伅銆?/li>
public class Request {
private RequestType type;
private String data;
public Request(RequestType type, String data) {
this.type = type;
this.data = data;
}
public RequestType getType() {
return type;
}
public String getData() {
return data;
}
@Override
public String toString() {
return "Request [type=" + type + ", data=" + data + "]";
}
}
- 鍦ㄥ鎴风涓垱寤哄叿浣撳鐞嗗櫒鐨勫疄渚嬶紝骞惰缃鐞嗗櫒涔嬮棿鐨勫叧绯汇€傜劧鍚庨€氳繃璋冪敤绗竴涓鐞嗗櫒鐨勫鐞嗘柟娉曟潵澶勭悊璇锋眰銆?/li>
public class Client {
public static void main(String[] args) {
// 鍒涘缓鍏蜂綋澶勭悊鍣ㄧ殑瀹炰緥
Handler handlerA = new ConcreteHandlerA();
Handler handlerB = new ConcreteHandlerB();
// 璁剧疆澶勭悊鍣ㄤ箣闂寸殑鍏崇郴
handlerA.setNextHandler(handlerB);
// 鍒涘缓璇锋眰
Request requestA = new Request(RequestType.TYPE_A, "Request A");
Request requestB = new Request(RequestType.TYPE_B, "Request B");
// 澶勭悊璇锋眰
handlerA.handleRequest(requestA); // ConcreteHandlerA handles request: Request [type=TYPE_A, data=Request A]
handlerA.handleRequest(requestB); // ConcreteHandlerB handles request: Request [type=TYPE_B, data=Request B]
}
}
娉ㄦ剰锛氳矗浠婚摼妯″紡鐨勫叧閿湪浜庤缃鐞嗗櫒涔嬮棿鐨勫叧绯伙紝纭繚姣忎釜澶勭悊鍣ㄩ兘鏈変笅涓€涓鐞嗗櫒鐨勫紩鐢ㄣ€傚鐞嗗櫒鎸夌収椤哄簭渚濇澶勭悊璇锋眰锛屽鏋滄煇涓鐞嗗櫒鑳藉澶勭悊璇ヨ姹傦紝鍒欒繘琛屽鐞嗭紱鍚﹀垯灏嗚姹備紶閫掔粰涓嬩竴涓鐞嗗櫒銆?/p>
相关问答