设计模式之观察者模式

**

设计模式之观察者模式

**
观察者模式(Observer Pattern)的定义
观察者模式,也叫做发布订阅模式(Publish/subscribe)
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
(定义对象间一种一对多点依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并且被自动更新。)

图解
这里写图片描述

优点

  • 观察者和被观察者之间是抽象耦合
  • 建立一套触发机制

代码

1.创建一个观察者的基类


public abstract class Observer {

    protected abstract void update();
}

2.创建一个被观察者基类

public abstract class Subject {

    //定义一个观察者数组
    private Vector<Observer> observers = new Vector<>();

    //注册观察者
    public void attach(Observer o){
        observers.add(o);
    }
    //注销观察者
    public void detach(Observer o){
        observers.remove(o);
    }

    //通知
    public void notifyObservers(){
        for (Observer o:
             observers) {
            o.update();
        }
    }

}

注意:这里不建议使用ArrayList,虽然ArrayList和Vector在使用方面没有什么太大的区别,ArrayList是线程异步,不安全;Vector是线程同步,安全——这点区别

3.创建一个观察者

public class ConcreteObserver extends Observer {


    @Override
    protected void update() {
        System.out.println("得到通知");
    }
}

4.创建一个被观察者

public  class ConcreteSubject extends Subject {


    public void doSomething(){

        /**
         * 活动
         * */
        System.out.println("哈哈,开始做事情了");
        super.notifyObservers();
    }

}

5.开始调用了

public class Demo {

    @Test
    public void test(){
        Observer observer = new ConcreteObserver();
        ConcreteSubject subject = new ConcreteSubject();
        subject.attach(observer);
        subject.doSomething();
    }
}

被观察者绑定了观察者之后,每当被观察者做出了自己的操作,观察者都会受到相应的通知提醒。哈哈,你也来试试吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值