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

    观察者模式:如果一个对象(被观察者)状态改变时需要去通知其他对象(观察者)进行一些操作,此时可以使用观察者模式。

          其实质还是通过观察者调用本身的方法进行操作。

    示例说明:班长告诉学生老师来了。被观察者:班长,观察者:学生

    被观察者:

    package com.zpj.designMode.observerPattern;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Monitor {
        private List<Observer> obers = new ArrayList<Observer>();
    
        public void notifyStudent() {
            for (Observer ob : obers) {
                ob.teacherIsComming();
            }
        }
    
        public void addObserver(Observer ob) {
            if (ob != null)
                obers.add(ob);
        }
    
        public void removeObserver(Observer ob) {
            if (ob != null)
                obers.remove(ob);
        }
    
    }

    定义观察者接口:

    package com.zpj.designMode.observerPattern;
    
    public interface Observer {
    
        public void teacherIsComming();
    }

    观察者实现类:

    package com.zpj.designMode.observerPattern;
    
    public class Student01 implements Observer {
    
        @Override
        public void teacherIsComming() {
            System.out.println("--------student01  reading");
        }
    
    }
    
    
    package com.zpj.designMode.observerPattern;
    
    public class Student02 implements Observer {
    
        @Override
        public void teacherIsComming() {
            System.out.println("--------student01  reading");
        }
    
    }
    
    
    package com.zpj.designMode.observerPattern;
    
    public class Student03 implements Observer {
    
        @Override
        public void teacherIsComming() {
            System.out.println("--------student01  reading");
        }
    
    }

    测试类:

    package com.zpj.designMode.observerPattern;
    
    import org.junit.Test;
    
    public class TestUtil {
    
        @Test
        public void test01() {
            Monitor mo = new Monitor();
            Observer s1 = new Student01();
            Observer s2 = new Student02();
            Observer s3 = new Student03();
    
            mo.addObserver(s3);
            mo.addObserver(s2);
            mo.addObserver(s1);
    
            mo.notifyStudent();
        }
    
        // java 的观察者模式
        @Test
        public void test02() {
            Monitor02 mo02 = new Monitor02();
            java.util.Observer student04 = new Student04();
            mo02.addObserver(student04);
            mo02.teacherIsComming();
    
        }
    }

    java中是定义的有观察者接口和被观察者抽象类的

    package com.zpj.designMode.observerPattern;
    
    import java.util.Observable;
    
    public class Student04 implements java.util.Observer {
    
        // 实现update抽象方法,在被观察者发生变化之后又在该方法中进行操作
        @Override
        public void update(Observable o, Object arg) {
            System.out.println("------------student04- -----------" + arg);
        }
    
    }
    package com.zpj.designMode.observerPattern;
    
    public class Monitor02 extends java.util.Observable {
    
        public void teacherIsComming() {
            // 设置changed = true,因为当changed== ture的时候才会调用观察者的update()方法。
            setChanged();
            // 通知观察者被观察者发生改变
            notifyObservers("teacher is comming !!!!");
            ;
        }
    
    }

    测试方法见test02()。

    参考链接:观察者模式

    ------------------------

  • 相关阅读:
    仿百度排列图片预览插件-Simple Lightbox
    vue2.0移动端自定义性别选择提示框
    微信小程序踩坑记
    网页里如何使用js禁用F12事件
    使用 html2canvas 实现浏览器截图
    h5、jq 移动端评论点攒功能
    js 数字递增特效 仿支付宝我的财富 HTML5
    aos.js超赞页面滚动元素动画jQuery动画库
    简洁AngularJS框架后台管理系统bootstrap后台模板
    Ionic 的 ng-class 在聊天功能上面的巧妙运用
  • 原文地址:https://www.cnblogs.com/PerkinsZhu/p/5833582.html
Copyright © 2011-2022 走看看