zoukankan      html  css  js  c++  java
  • 举例简述观察者模式(Observer)

    常用设计模式———观察者模式

    定义:一对多的依赖关系,让多个观察者同时监听某一个主题帮助。当该对象发生变化时,会通知所有观察者,使他们的状态自动发生变化。【如学生监听老师的动作,当老师发作业时,学生的动作根据作业来产生变化,并知道是哪位老师在布置作业。】

    2、优点:减少对象之间的耦合,有利于系统的复用,并保证分工合作的高效

    3、应用场合:如网站监听在线人数,并监听是什么用户在做什么动作,接着网站的某些动作随之变化

    举例说明——

     1 package listener;
     2 public class Demo1 {
     3  /**观察者模式
     4   * @param args
     5   */
     6  public static void main(String[] args) {
     7   // TODO Auto-generated method stub
     8   Person p=new Person();
     9   p.register(new MyPersonListener(){    //注入监听器
    10    //重写该接口的方法,学生开始跑,并能知道是哪位老师发指令
    11    public void dorun(Event e){
    12     Person p=e.getsource();
    13    System.out.println(p+"跑步咯");
    14    }
    15    public void doeat(Event e){
    16     Person p=e.getsource();
    17     System.out.println(p+"吃饭咯");
    18    }
    19   });
    20   p.eat();
    21  }
    22 }
    23 class Person{    //观察者,类比学生
    24  private MyPersonListener listener=null;//监听动作
    25  public void run(){
    26   if(listener!=null){    //当老师发指令,就触发dorun方法,加入event就知道是哪位老师发指令
    27    listener.dorun(new Event(this));
    28   }
    29  }
    30  public void eat(){
    31   if(listener!=null){
    32    listener.doeat(new Event(this));
    33    System.out.println("事件2");
    34   }
    35  }
    36  public void register(MyPersonListener listener){
    37   this.listener=listener;
    38  }
    39 }
    40 //监听的对象——事件源(类比老师,这里有多个老师)
    41 class Event{
    42  private Person source;
    43  public Event(Person source){
    44   this.source=source;
    45  }
    46  public Person getsource(){
    47   return this.source;
    48  }
    49 }
    50 //监听接口
    51 interface MyPersonListener{
    52  public void dorun(Event e);
    53  public void doeat(Event e);
    54 }

    5、输出结果——(显示是哪个监听者对象在做什么事)

    6、求职过程中,不管是笔试还是技术面,都经常会涉及常用的设计模式,在使用什么框架时加入什么设计模式,都是考验求职者能力的一步,普遍性很广。

  • 相关阅读:
    C#终止线程的方法
    Socket编程(TCP、UDP)
    频率域滤波基础之五(读数字图像处理学习halcon)
    hihoCoder #1127:二分图最小点覆盖和最大独立集
    hihoCoder #1033 : 交错和 (数位Dp)
    HDU-5536 Chip Factory (字典树)
    hihoCoder #1040 (判断是否为矩形)
    hihoCoder:#1079(线段树+离散化)
    HDU-5532 Almost Sorted Array (LIS)
    UVALive-7303 Aquarium (最小生成树)
  • 原文地址:https://www.cnblogs.com/aceview789/p/4921058.html
Copyright © 2011-2022 走看看