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

    个人理解,观察者模式就是在一个事件触发之后观察者们做系列操作

    1.定义一个接口,多个观察者都实现该接口重写其方法

    2.在被观察的对象里定义一个观察者容器,当事件触发,一次执行每个观察者的操作方法

    3.测试类里面测试,实例化孩子类(Child1),调用孩子醒了的方法(wakeUp()),运行结果

    dad feeding ...
    mum huging ...
    dog wang ...

    package com.mashibing.dp.observer.v8;


    import java.util.ArrayList;
    import java.util.List;

    /**
    * 有很多时候,观察者需要根据事件的具体情况来进行处理
    * 大多数时候,我们处理事件的时候,需要事件源对象
    * 事件也可以形成继承体系
    */
    class Child1{
    private boolean cry = false;
    List<Observer1> observer1s= new ArrayList<>();
    //把观察的对象偶读放进容器
    {
    observer1s.add(new Dad1());
    observer1s.add(new Mum1());
    observer1s.add(new Dog1());

    }
    public boolean isCry(){
    return cry;
    }

    wakeUpEvent1 event1 = new wakeUpEvent1(System.currentTimeMillis(), "bed",this);

    public void wakeUp(){
    cry=true;
    //遍历观察者,执行各个观察者的方法
    for (Observer1 observer1 : observer1s) {
    observer1.actionOnWakeUp(event1);
    }
    }
    }
    abstract class Event1<T>{
    abstract T getSource();
    }
    //事件类,fire Event
    class wakeUpEvent1 extends Event1<Child1>{
    long timestamp;
    String loc;
    Child1 source;

    public wakeUpEvent1(long timestamp, String loc, Child1 source) {
    this.timestamp = timestamp;
    this.loc = loc;
    this.source = source;
    }

    @Override
    Child1 getSource() {
    return source;
    }
    }

    interface Observer1{
    void actionOnWakeUp(wakeUpEvent1 event1);
    }

    class Dad1 implements Observer1 {
    public void feed(){
    System.out.println("dad feeding ...");
    }

    @Override
    public void actionOnWakeUp(wakeUpEvent1 event1) {
    feed();
    }
    }

    class Mum1 implements Observer1 {
    public void hug(){
    System.out.println("mum huging ...");
    }

    @Override
    public void actionOnWakeUp(wakeUpEvent1 event1) {
    hug();
    }
    }

    class Dog1 implements Observer1 {
    public void wang(){
    System.out.println("dog wang ...");
    }

    @Override
    public void actionOnWakeUp(wakeUpEvent1 event1) {
    wang();
    }
    }

    public class Main1 {
    public static void main(String[] args) {
    Child1 child1 = new Child1();
    // child1.isCry();
    child1.wakeUp();
    }
    }

  • 相关阅读:
    20个设计精致的用户界面 PSD 源文件免费下载
    Mergely – 免费的在线文档对比和合并工具
    你应该知道的10个奇特的 HTML5 单页网站
    One Page Scroll – 实现苹果风格的单页滚动效果
    学习如何制作 404 错误页面的15个最佳案例
    Rainyday.js – 傻眼了!竟然有如此逼真的雨滴效果
    Lo-Dash – 替代 Underscore 的优秀 JS 工具库
    30个实用的 Photoshop 动作《免费下载》
    Wrangle – 响应式的,触摸友好的多选插件
    经典案例:那些让人赞不绝口的创新 HTML5 网站
  • 原文地址:https://www.cnblogs.com/hikoukay/p/12793573.html
Copyright © 2011-2022 走看看