The Observer Model of Personal Summarization

Keywords: Java

Four basic elements: Abstract subject, concrete subject, Abstract observer and concrete observer.
One-to-many, so that multiple observers correspond to a theme. For example, the project manager notifies the people under his control that the job is to write code, the UI job is to draw and design, and the tester's job is to test software. Code directly:
Abstract theme

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

Abstract observer

public interface Observer {
    void work();
}

Specific theme (project leader)

import java.util.ArrayList;
import java.util.List;

public class SubjectLeader implements Subject {
    private List<Observer> observers = new ArrayList<>();

    @Override
    public void attach(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void detach(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObserver() {
        observers.forEach(observer -> observer.work());
    }
}

Specific observers (programmers)

public class ProgramerObserver implements Observer {
    @Override
    public void work() {
        System.out.println("Programmer code");
    }
}

Specific observer (UI)

public class UiObserver implements Observer {
    @Override
    public void work() {
        System.out.println("UI Draw pictures");
    }
}

Specific observer (test)

public class TestObserver implements Observer {
    @Override
    public void work() {
        System.out.println("Testing begins to test the software.");
    }
}

Test class

public class Test {
    public static void main(String[] args){
        Subject subjectLeader = new SubjectLeader();
        Observer programer = new ProgramerObserver();
        Observer ui = new UiObserver();
        Observer test = new TestObserver();
        subjectLeader.attach(programer);
        subjectLeader.attach(ui);
        subjectLeader.attach(test);
        //The leader notified everyone that work had started.
        subjectLeader.notifyObserver();
    }
}

Running results

Programmer code
 UI drawing.
Testing begins to test the software.

Process finished with exit code 0

Posted by twostars on Thu, 03 Oct 2019 12:50:16 -0700