Java设计模式之观察者模式

观察者模式也叫发布订阅模式,意思是:定义对象之间一对多的依赖关系,使得每当一个对象改变状态时,则所有依赖于它的对象都得到通知并被自动更新。
观察者模式(发布订阅模式)包含如下角色:

  • 抽象发布者:可以增加、删除、通知订阅者;
  • 具体发布者:抽象发布者方法的具体实现;
  • 抽象订阅者:定义一个接受通知的方法,在得到通知时更新自己的状态;
  • 具体订阅者:抽象订阅者的具体实现。

下面以订阅报纸为例:

public interface INewsPaper {
    //添加订阅者
    void add(IPerson iPerson);
    //删除订阅者
    void remove(IPerson iPerson);
    //通知所有订阅者
    void notifyPersons();
}
public class NewsPaper implements INewsPaper {

    private List<IPerson> personList = new ArrayList<>();

    @Override
    public void add(IPerson iPerson) {
        personList.add(iPerson);
    }

    @Override
    public void remove(IPerson iPerson) {
        personList.remove(iPerson);
    }

    @Override
    public void notifyPersons() {
        for (IPerson person: personList) {
            person.update();
        }
    }
}
public interface IPerson {

    void update();
}

public class Person implements IPerson {
    @Override
    public void update() {
        System.out.println("我收到了通知");
    }
}
public class Test {

    public static void main(String[] args) {
        INewsPaper newsPaper = new NewsPaper();
        IPerson person = new Person();
        newsPaper.add(person);
        newsPaper.notifyPersons();
    }
}
我收到了通知

由上述代码可知,在观察者模式中,发布者并不知道每一个订阅者,它只知道订阅者们的共同接口-抽象订阅者,所以观察者模式容易扩展,符合开闭原则。但是,如果订阅者比较多时,每个通知会比较耗时。

观察者模式的应用场景如下:

  • 关联行为的场景,比如:在一个系统中,如果用户完善了个人资料,就会增加积分、开放更多权限等;
  • 消息队列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值