1.概念
责任链模式,类似于Servlet中对request进行一步一步的处理,相当于一整条链路上面,每一个节点都会对其进行处理,处理完之后在进行下一个节点的处理。
2.go实现
package alian
import "fmt"
type Request struct {
RequestBody string
}
type Handler interface {
SetHandler (hand *Handler)
Hand (request *Request)
}
type LoginHandler struct {
Next *Handler
}
func (this *LoginHandler) SetHandler(hand *Handler){
this.Next = hand
}
func (this *LoginHandler) Hand(request *Request){
fmt.Println("LoginHandler...", request)
if this.Next != nil {
(*this.Next).Hand(request)
}
}
type LogHandler struct {
next *Handler
}
func (this *LogHandler) SetHandler(hand *Handler){
this.next = hand
}
func (this *LogHandler) Hand(request *Request){
fmt.Println("LogHandler...", request)
if this.next != nil {
(*this.next).Hand(request)
}
}
package alian
import "testing"
func TestDutyChain(t *testing.T) {
r := Request{"alian"}
var login Handler
var log Handler
login = &LogHandler{nil}
log = &LoginHandler{nil}
log.SetHandler(&login)
log.Hand(&r)
}
3.Java实现
/**
* @program: demo
* @author: alian
* @description:
* @create: 2023-03-29 20:33
**/
package alian;
public interface Handler {
void SetHandler(Handler handler);
void Hand(Request request);
}
/**
* @program: demo
* @author: alian
* @description:
* @create: 2023-03-29 20:35
**/
package alian;
public class LogHandler implements Handler{
Handler next = null;
@Override
public void SetHandler(Handler handler) {
this.next = handler;
}
@Override
public void Hand(Request request) {
System.out.println("LogHandler..."+request.RequestBody);
if (next != null){
next.Hand(request);
}
}
}
/**
* @program: demo
* @author: alian
* @description:
* @create: 2023-03-29 20:35
**/
package alian;
public class LoginHandler implements Handler{
Handler next = null;
@Override
public void SetHandler(Handler handler) {
this.next = handler;
}
@Override
public void Hand(Request request) {
System.out.println("LoginHandler..."+request.RequestBody);
if (next != null){
next.Hand(request);
}
}
}
/**
* @program: demo
* @author: alian
* @description:
* @create: 2023-03-29 20:34
**/
package alian;
public class Request {
String RequestBody;
public Request(String requestBody) {
RequestBody = requestBody;
}
}
/**
* @program: demo
* @author: alian
* @description:
* @create: 2023-03-29 20:38
**/
package alian;
public class Main {
public static void main(String[] args) {
Request r = new Request("alian");
Handler login = new LoginHandler();
Handler log = new LogHandler();
log.SetHandler(login);
log.Hand(r);
}
}