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

  • 相关阅读:
    vue2.0对于数组变化不及时刷新视图的问题
    [Node]报错:gyp verb check python checking for Python executable "python2" in the PATH
    spring的@ControllerAdvice注解
    antdVue--Upload使用
    antd Vue--this.$confirm弹窗使用
    播放视频判断是否暂停_Javascript判断Video视频播放、暂停、结束完成及获取长度事件监听处理...
    P5400 [CTS2019]随机立方体
    P7502 「HMOI R1」不知道是啥的垃圾题
    vue3插槽使用
    cocos creator破解
  • 原文地址:https://www.cnblogs.com/aceview789/p/4921058.html
Copyright © 2011-2022 走看看