[Design Mode] - Observer pattern Observer

  Preface: [ Mode Overview ] ---------- by xingoo

  Intention mode

  Observer mode, also known as publish / subscribe model, will be able to detect it from the name of its process should be released - others accept.

  This pattern defines a dependency relationship between objects, when an object is changed, another object receives updates, also changes .

  We subscribe to the mailing simulate this scenario, no matter landed in our mailbox is still closed, the mail will be sent to the mail inside. As long as your mailbox Subscribe to this message on it! This mode is also such a process.

  The model code is relatively easy to understand, and very broad application.

  Scenarios

  1 When a model has several aspects show, a show by modifying the way other updates. Like a web site has an end, but also the mobile side, when the web-side data changes, the mobile terminal data presentation should be updated.

  Two pairs of an object is changed, will not know how many objects will change when using this mode can effectively manage objects.

  Mode structure

  Subject abstract thematic roles

interface Subject{
    public void attach(Observer observer);
    public void detach(Observer observer);
    void notifyObservers();
}

  ConcreteSubject specific topics roles, the inside has an easy to hold subscribers

class ConcreteSubject implements Subject{
    List<Observer> list = new ArrayList();
    public void attach(Observer observer) {
        list.add(observer);
    }
    public void detach(Observer observer) {
        list.remove(observer);
    }
    public void notifyObservers() {
        for(Observer o : list){
            o.update();
        }
    }
}

  Observer abstract subscribers role

interface Observer{
    public void update();
}

  ConcreteObserver specific subscribers

class ConcreteObserver1 implements Observer{
    public void update() {
        System.out.println("ConcreteObserver1 update");
    }
}
class ConcreteObserver2 implements Observer{
    public void update() {
        System.out.println("ConcreteObserver2 update");
    }
}
class ConcreteObserver3 implements Observer{
    public void update() {
        System.out.println("ConcreteObserver3 update");
    }
}

  All codes

 1 package com.xingoo.test.design.observer;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 interface Subject{
 7     public void attach(Observer observer);
 8     public void detach(Observer observer);
 9     void notifyObservers();
10 }
11 class ConcreteSubject implements Subject{
12     List<Observer> list = new ArrayList();
13     public void attach(Observer observer) {
14         list.add(observer);
15     }
16     public void detach(Observer observer) {
17         list.remove(observer);
18     }
19     public void notifyObservers() {
20         for(Observer o : list){
21             o.update();
22         }
23     }
24 }
25 interface Observer{
26     public void update();
27 }
28 class ConcreteObserver1 implements Observer{
29     public void update() {
30         System.out.println("ConcreteObserver1 update");
31     }
32 }
33 class ConcreteObserver2 implements Observer{
34     public void update() {
35         System.out.println("ConcreteObserver2 update");
36     }
37 }
38 class ConcreteObserver3 implements Observer{
39     public void update() {
40         System.out.println("ConcreteObserver3 update");
41     }
42 }
43 public class Client {
44     public static void main(String[] args) {
45         Subject subject = new ConcreteSubject();
46         Observer o1 = new ConcreteObserver1();
47         Observer o2 = new ConcreteObserver2();
48         Observer o3 = new ConcreteObserver3();
49         subject.attach(o1);
50         subject.attach(o2);
51         subject.attach(o3);
52         subject.notifyObservers();
53         
54         subject.detach(o2);
55         subject.notifyObservers();
56     }
57 }
View Code

  operation result

ConcreteObserver1 update
ConcreteObserver2 update
ConcreteObserver3 update
ConcreteObserver1 update ConcreteObserver3 update

 

Reproduced in: https: //my.oschina.net/u/204616/blog/545007

Guess you like

Origin blog.csdn.net/weixin_33806914/article/details/91989518