Posts 【行为型】责任链模式详解
Post
Cancel

【行为型】责任链模式详解

【行为型】责任链模式

定义

1
定义:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

UML图

1
2
3
4
5
6
7
8
9
10
11
12
13
   _ _ _ _ _ _      _ _ _ _ _ _  _ _ _
  |           |    |                  |
  | client    |---→| AbstractHandler  |←---┐
  |_ _ _ _ _ _|    | requestHandler() |    |
                   |_ _ _ _ _ _  _ _ _|    |
                      ↑        ↑    |      |
                      |        |    |______|
                      |        |
     _ _ _ _ _ _ _ _ _|_      _|_ _ _ _ _ _ _ _ _
    |                   |    |                   |
    | ConcreteHandlerA  |    | ConcreteHandlerB  |
    | requestHandler()  |    | requestHandler()  |
    |_ _ _ _ _ _ _ _ _ _|    |_ _ _ _ _ _ _ _ _ _|

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public abstract class Manager{


    private Manager manager;


    public Manager getManager(){

        return manager;
    }

    public void setHandler(Manager manager){

        this.manager = manager;
    }

    public abstract void handleRequest(String requestContent);

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Leader extends Manager{

    @implement
    public void handleRequest(String requestContent){

        if( getHandler() == null ){

            System.out.println("Leader agree for request:"+requestContent);
        }else{

            System.out.println("Leader have no power to handle the request.");

            getHandler().handleRequest(requestContent);
        }

    }

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class CEO extends Manager{

    @implement
    public void handleRequest(String requestContent){

        if( getHandler() == null ){

            System.out.println("CEO agree for request:"+requestContent);
        }else{

            System.out.println("CEO have no power to handle the request.");

            getHandler().handleRequest(requestContent);
        }
    }

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Client{

    public static void main(String[] args){

        Manager leader = new Leader();

        Manager ceo = new CEO();

        leader.setHandler( ceo );


        leader.handleRequest("I'm a leader... I want to increase wages!");

    }


}

运行结果:

    Leader have no power to handle the request.

    CEO agree for request:I'm a leader... I want to increase wages!

应用

1
只有想起加薪水的时候,才会想起责任链模式! -_-#

This post is licensed under CC BY 4.0 by the author.

【行为型】迭代器模式详解

【行为型】命令模式详解