`
songzhan
  • 浏览: 247887 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

4月17号 -- 观察者模式

阅读更多

今天的任务:学习"观察者模式"

一、观察者模式:Observer模式定义对象间的一对多的依赖关系,当一个对象(被观察者)的状态发生改变时, 所有依赖于它的对象(观察者)都得到通知并被自动更新。

     在目标对象中会有观察者集合,当目标对象有变化时将会通知所有观察者集合对象做相关更新操作。

二、实例 :

       老师有电话号码,学生需要知道老师的电话号码以便在需要的时候拨打,在这样的模式中,老师就是一个被观察者(Subject),学生就是需要知道信息的观察者。当老师的电话号码发生改变时,学生会得到通知,并更新相应的电话记录。

 

    public interface IObServer {  
        public void update(String msg);  
    }  

 

    public class Student implements IObServer {  
        
        private String student_name;  
        public Student(String name){  
          student_name = name;  
        }  
          
        public void update(String msg) {  
          System.out.println(student_name + ":\t" + msg);  
        }  
    }  

 

    public interface ISubject {  
        //添加一个通知  
        public void add(IObServer o);  
        //移除一个通知  
        public void del(IObServer o);  
        //执行下达通知的指令  
        public void notice();  
    }  

 

    import java.util.ArrayList;  
      
    public class Teacher implements ISubject {  
        //定义students:所有学生  
        private ArrayList<IObServer> students = new ArrayList<IObServer>();  
        private String msg = "";//老师要发出的信息  
        public void setMsg(String new_msg){  
          msg = new_msg;  
        }  
        //收集所有学生信息   
        public void add(IObServer o) {  
          students.add(o);  
        }  
       
        public void del(IObServer o) {  
          students.remove(o);  
        }  
       //通知学生 
        public void notice() {  
          for(int i=0;i<students.size();i++){  
            students.get(i).update(msg);  
          }  
        }  
    }  

 

    public class Test {  
      
        public static void main(String[] args) {  
          ArrayList<IObServer> students = new ArrayList<IObServer>();  
          Teacher t = new Teacher();  
          for(int i=1;i<=10;i++){  
            Student s = new Student("aa"+i);  
            students.add(s);  
            t.add(s);  
          }  
          t.setMsg("phone:123456789");  
          t.notice();  
          System.out.println("-----把其中几个学生移除接收通知的范围--------------");  
          for(int i=0;i<students.size();i++){  
            if(i%2==0){  
              t.del(students.get(i));  
            }             
          }  
          t.notice();  
        }  
    }  

 三、模式优缺点

     观察者模式的优点:

        1、观察者模式可以实现表现层和数据逻辑层的分离,并定义了稳定的消息更新传递机制,抽象了更新接口,使得可以有各种各样不同的表现层作为具体观察者角色。

        2、观察者模式在观察目标和观察者之间建立一个抽象的耦合。

        3、观察者模式符合“开闭原则”的要求。

     观察者模式的缺点:

        1、如果一个观察目标对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。

        2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发他们之间进行循环调用,可能导致系统崩溃。

        3、观察者模式没有相应的机制让观察者知道所有观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化

  

四、观察者模式适用环境

 

   在以下情况下可以适用观察者模式:

        1、一个抽象的模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立的改变和复用。

        2、一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。

        3、一个对象必须通知其他对象,而并不知道这些对象是谁

        4、需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象...,可以适用观察者模式创建一种链式触发机制 

 

分享到:
评论

相关推荐

    RFC中文文档-txt

    RFC101 对1971年2月17日伊利诺斯州的Urbana的网络工作组会议的注释 RFC102 主机-主机 协议故障清除委员会的说明 RFC103 中断键的执行 RFC104 连接 191 RFC105 通过 UCSB 进行远程登录和远程输出返回的网络说明书 RFC...

    贵州省黔西南布依族苗族自治州册亨县综合基础知识试题汇编2010年-2020年详细解析版(一).docx

    - 劳动合同期限不满3个月的不得约定试用期,这是保护劳动者权益的规定,避免短期劳动合同下的不平等。 6. **历史事件排序**: - 顺序应该是先改革开放,提出解放思想的指导方针,然后是调整经济,接着设立经济...

    通信工程师考试(综合能力试卷)(三).docx

    观察调查法**:通过观察行为等方式收集信息。 - **D.实验调查法**:通过实验设计收集数据。 #### 二十五、服务职能质量 **知识点25:服务职能质量** - 职能质量是指服务过程中服务人员的行为、态度等给客户带来的...

    精品资料(2021-2022年收藏)全国高等教育自学考试审计学试题及答案.docx

    1. 审计的起源与目标:审计起源于财产所有权与经营权的分离,注册会计师审计主要是为了确保财产所有者对经营者的监督,保护所有者的利益。 2. 审计独立性:审计独立性是审计工作的核心,对于审计结果的公信力至关...

    新浪将于8月18日发布2021年第二季度财报.docx

    电话会议的安排显示,新浪管理团队将在美国东部时间8月17日晚9点(北京时间8月18日早9点)进行,参与者可以通过指定的电话接入号码参与,或者在线收听会议实况。会议还将提供录音回放,以方便未能参加直播的人士事后...

    Linux操作系统基础教程

    .....................................................................................4 六.在那里可以找到讨论区?.........................................................................................

    (完整word版)2017-11-数据库复习题答案.doc

    这篇文档是针对2017年11月的一份数据库复习题目的答案,涵盖了数据库的基础知识和常见概念。 1. 视图是数据库中的一个重要概念,它是一个虚表,不直接存储数据,而是基于基本表的查询结果。用户可以通过视图来观察...

    GeoAnalytics Server成都市出租车大数据分析1

    成都市的出租车数据集非常庞大,包含了超过1.4万辆出租车在2014年8月3日至30日(除7号、13号、17号)期间的超过12亿条GPS轨迹记录。这些数据以txt格式存储,每条记录可能包括了出租车的定位时间、经纬度坐标、速度、...

    中文版RFC,共456

    RFC101 对1971年2月17日伊利诺斯州的Urbana的网络工作组会议的注释 RFC102 主机-主机 协议故障清除委员会的说明 RFC103 中断键的执行 RFC104 连接 191 RFC105 通过 UCSB 进行远程登录和远程输出返回的网络说明书 RFC...

    rfc中文文档目录,包含部分翻译

    RFC101 对1971年2月17日伊利诺斯州的Urbana的网络工作组会议的注释 RFC102 主机-主机 协议故障清除委员会的说明 RFC103 中断键的执行 RFC104 连接 191 RFC105 通过 UCSB 进行远程登录和远程输出返回的网络说明书 ...

    传媒行业周报:游戏版号审批将试行全新评分制,芒果TV举办春季招商会.pdf

    其次,关于芒果TV春季招商会的举办,芒果TV在2021年4月17日举办了春季新芒品鉴会,展示了即将推出的电视剧和综艺节目。剧集方面,芒果TV计划推出季风剧场,并有一系列自制剧和现代题材剧亮相,如《狂猎》、《我在...

    Scratch蓝桥杯科学素养考试卷初级组模拟题附答案

    11. **视野与高度的关系**:“欲穷千里目,更上一层楼”反映了随着观察者高度的增加,可见范围也随之增大的现象。这涉及到几何光学原理。 12. **月球表面结构**:题目指出“夜晚时如果仔细观察月亮,可以发现月亮...

    内蒙古阿拉善左旗2017_2018学年高一地理上学期期中试题.doc

    6. 极光观测:当太阳活动强烈时,高纬度地区的观察者,如俄罗斯北部,可能看到美丽的极光现象。 7. 地球自转方向:地球自转是从西向东,正确的表示是图片B。 8. 河流侵蚀:河流的侵蚀主要发生在下切力较大的河岸,...

    重庆市云阳盛堡初级中学2015_2016学年七年级数学上学期第一次月考试题新人教版

    12. **找规律填空**:这类问题通常需要观察数列中的模式,然后找出下一个数字。可能涉及到幂次、加减规律、分母变化等。 13. **正负数的记录**:在银行工作中,存款为正,取款为负。所以,支取2万元记作-2万元,-4...

    百万公众网络在线答题.doc

    16. **航天技术**:神州5号飞船通过控制航天器的姿态,使观察窗口始终对着地球。 17. **二手烟危害**:被动吸烟,即吸二手烟,同样有害健康。 18. **雾霾成分**:雾霾主要由二氧化硫、氮氧化物和可吸入颗粒物组成...

    千字文打印版拼音及解释.doc

    4. **地理资源**:“金生XX,玉出昆冈”提到矿产资源的分布,金沙江和昆仑山分别富含黄金和玉石。 5. **古代宝物**:“剑号巨阙,珠称夜光”介绍了古代著名的剑和明珠,体现了人们对珍贵物品的崇尚。 6. **植物与...

    消防安全常识试题与答案.docx

    11. **“四全”安全管理的概念**:“四全”安全管理指的是全员参与、全过程控制、全方位管理和全天候监控的安全管理模式,旨在通过这些手段全面提升安全生产管理水平。 #### 二、选择题解析 1. **配电柜内电源线...

Global site tag (gtag.js) - Google Analytics