世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。 ——摘自周志明

(7)观察者模式-行为模式

定义:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。
案例代码:

/**
 * 主题,维护观察列表,新增,删除,接口
 */
public class MySubject {

    private List<MyObserver> myObservers = new ArrayList<>();

   public void addOb(MyObserver myObserver){
        this.myObservers.add(myObserver);
    }

    void delOb(MyObserver myObserver){
       this.myObservers.remove(myObserver);
    }

    void tongzhi(){
        for (MyObserver ob: myObservers) {
            ob.update();
        }
    }
}
/**
 * 具体的主题
 */
public class ConcreteSubject extends MySubject {
     public void doSomething() {
         //具体业务
         System.out.println("测试主题数据有更新。。。。。");
         //通知列表中所有的观察者
         super.tongzhi();
     }
}

观察者代码

/**
 * 观察者接口
 */
public interface  MyObserver {
    void update();
}

public class ConcreteObserver implements MyObserver {
    @Override
    public void update() {
        System.out.println("观察者收到消息,进行处理");
    }
}

测试:

public class Client {
    public static void main(String[] args) {
        //创建一个主题
        ConcreteSubject concreteSubject = new ConcreteSubject();

        //创建一个观察者
        MyObserver concreteObserver = new ConcreteObserver();

        //观察
        concreteSubject.addOb(concreteObserver);
        //搞事情
        concreteSubject.doSomething();
    }
}

个人理解:观察者模式,就是维护观察者列表,通过遍历该列表中的对象调用其方法。

应用

posted @ 2021-01-17 21:55  白杯与咖啡  阅读(89)  评论(0编辑  收藏  举报