Posts 【行为型】观察者模式详解
Post
Cancel

【行为型】观察者模式详解

【行为型】观察者模式

定义

1
2
3
4
定义:定义一种一对多的依赖关系,让多个观察者对象同时监听某一对象。这个主题对象在状态发生变化时,会通知所有观察
     者对象,使它们能做出相应的动作。

模板方法模式角色:

UML图

1
2
3
4
5
6
7
8
9
10
11
   _ _ _ _ _ _ _ _ _ _      _ _ _ _ _ _  _ _ _
  |                   |    |                  |
  |  AbstractSubject  |---→| AbstractObserver |
  |_ _ _ _ _ _ _ _ _ _|    |_ _ _ _ _ _  _ _ _|
           ↑                         ↑
           |                         |
           |                         |
   _ _ _ _ |_ _  _ _ _      _ _ _ _ _|_ _ _ _ _
  |                   |    |                   |
  |  ConcreteSubject  |←---| ConcreteObserver  |
  |_ _ _ _ _ _ _ _ _ _|    |_ _ _ _ _ _ _ _ _ _|

代码

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

    private ArrayList<Observer> observerList = new ArrayList<Observer>();

    public void addObserver(Observer observer){

        observerList.add(observer);
    }

    public void delObserver(Observer observer){

        observerList.remove(observer);
    }

    public void notify(){

        for(Observer observer : observerList){

            observer.do();
        }
    }
}

1
2
3
4
public abstract class Observer{

    public abstract void do();
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class Teacher extends Leader{

    private String message;

    public void setMessage(String message){

        this.message = message;
    }

    public String getMessage(){

        return this.message;
    }
} ***

public class Monitor extends Observer{

    private String name;

    private String observerMessage;

    private Teacher teacher;

    public Monitor(Teacher teacher, String name){

        this.name = name;

        this.teacher = teacher;
    }


    public void do(){

        this.observerMessage = teacher.getMessage();

        System.out.println("The monitor of "+this.name+" get message from teacher:"+this.observerMessage);
    }



}

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


    public static void main(String[] args){

        Teacher teacher = new teacher();

        teacher.addObserver( new Monitor(teacher,"Jack") );

        teacher.addObserver( new Monitor(teacher,"Bill") );

        teacher.setMessage("I will have a rest for a few days.");

        teacher.notify();

    }

}

运行结果:

    The monitor of Jack get message from teacher: I will have a rest for a few days.

    The monitor of Bill get message from teacher: I will have a rest form a few days.

应用


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

【行为型】模板方法模式详解

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