java设计模式6:观察者模式(理解\示例\使用)

1、认识观察者模式

观察者模式,用来处理对象间一对多的依赖关系,即当一个对象发生变化,依赖对象组(list)都会得知该变化并做进一步处理。
设计实现上包含四个角色 :
(1)抽象主题,或称抽象通知者,用来管理观察者对象,主要包含,增、删、通知操作。
(2)抽象观察者,用来定义观察者得到通知后做的一系列处理。
(3)具体主题 ,实现抽象主题
(4)具体观察者,实现抽象观察者

2、代码demo

假设一个场景 : 班主任来了,课代表通知 : 小明不要玩手机,小红不要睡觉..

//抽象主题/抽象通知者,用来管理观察者
public interface Subject {

    //增加观察者
    void addObs(Observer observer);

    //移除观察者
    void removeObs(Observer observer);

    //通知观察者
    void notifyObs();

}
//观察者,主要做:观察到变化更新自己
 interface Observer {

    //得到通知做出响应
    void update();

}
class ConcreteSubject implements Subject {

    private Vector observerList = new Vector<>();

    @Override
    public void addObs(Observer observer) {

        observerList.add(observer);

    }

    @Override
    public void removeObs(Observer observer) {
        observerList.remove(observer);
    }

    @Override
    public void notifyObs() {
        for (Observer o:observerList){
            o.update();
        }
    }
}
class ConcreteObserver2 implements Observer {
    @Override
    public void update() {

        System.out.println("小红得到通知了。不睡觉。。");
    }
}
class ConcreteObserver1 implements Observer {
    @Override
    public void update() {

        System.out.println("小明得到通知了。不玩手机。。");
    }
}

//测试
class Test{

    public static void main(String[] args) {

        ConcreteSubject concreteSubject = new ConcreteSubject();
        concreteSubject.addObs(new ConcreteObserver1());
        concreteSubject.addObs(new ConcreteObserver2());
        concreteSubject.notifyObs();
        
    }
}

3、留意点

  • 主题可以有很多个,去各自实现抽象主题。

你可能感兴趣的:(java设计模式6:观察者模式(理解\示例\使用))