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();
    }
    }

  • 相关阅读:
    用户控件的缓存技术之二【共三篇】
    .NET获取URL的各种方式及其区别
    图片上传封装类【包括图片上传和缩略图上传】.NET
    .NET抓取数据范例 抓取页面上所有的链接
    JQuery基础 学习的一些例子以及手册
    呵呵呵呵。。。系统还原了,终于可以用IE登陆百度了
    不用框架使用ajax 纯js使用ajax post,get范例及其区别
    用ashx还是aspx写ajax响应
    repeater绑定数组、哈希表、字典 ArrayList/HashTable,Dictionary为datasource
    Access数据库访问类 帮助类
  • 原文地址:https://www.cnblogs.com/hikoukay/p/12793573.html
Copyright © 2011-2022 走看看