zoukankan      html  css  js  c++  java
  • 设计模式2:观察者模式

    1.主题subject

    subject中有一个链表,用来存放已经注册的observer对象,这样数据改变的时候就可以在notice里面实现通知所有observer了。

    既然是list,那么数据类型应该是相同的,所以不可以创建公告牌A,公告牌B等不同的类型。

    书中给出,创建observer类,里面只有一个update,公告牌继承observer类。

    这样逻辑有点乱,观察者里面为什么只有一个update呢?恐怕只是为了作为list的成员才单独实现的observer吧?

    2. 我给出的方案是:

    创建observer类作为基类,里面有update和display函数,不同公告牌继承observer类;

    链表指针都是observer指针,可以作为list元素,由于指向不同派生类,还可以实现各自的结构(通过多态性实现)。

    这种共性和差异性都体现出来了!

    3.observer可以是接口吗?

    接口是用来实现的,类是用来继承的。

    这里明显是继承了observer,并具有成员变量,并不像之前接口那样,里面只有单独的一个函数。

    所以observer不符合java中关于接口的定义。

    但是,observer完全实现了接口的功能,可以实现:

    当公告牌类的数目和类型发生变化的时候,并不需要重新写与接口相关的调用。

    4.结论

    所以,既然C++的接口和普通类没有区分那么明显,

    在学习面向接口编程思想的基础上,就不要太拘泥于形式了。

  • 相关阅读:
    便 加权并查集
    bzoj 4565 状压区间dp
    bzoj 2242 [SDOI2011]计算器 快速幂+扩展欧几里得+BSGS
    poj 3243 扩展BSGS
    bzoj 3239 poj 2417 BSGS
    51nod 1135 原根 就是原根...
    bzoj 2005 能量采集 莫比乌斯反演
    约会 倍增lca
    bzoj 2186 [Sdoi2008]沙拉公主的困惑 欧拉函数
    IE下textarea去除回车换行符
  • 原文地址:https://www.cnblogs.com/Younger-Zhang/p/10618779.html
Copyright © 2011-2022 走看看