zoukankan      html  css  js  c++  java
  • 设计模式学习02观察者模式

    定义

    The Observer pattern defines a one-to-many dependency between objects so that when one changes state, all of its dependents are notified and updated automatically.

    观察者模式定义了对象之间的一对多的依赖关系,这样当一个对象的状态发生改变时,依赖它的那些对象将会被通知到,会自动更新自己的状态.

    说明

    观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式。做软件开发的经常会订阅邮件列表,这其实也是一种观察者(Observer)模式。JavaAPI提供了对这一模式的原生支持,为我们提供了Observer接口和Observable类来实现所谓观察者模式。

    图示


    使用Java内置的模式

    主题类

     1import java.util.Observable;
     2
     3/**
     4 * 观察者模式学习 (主题类)
     5 * 
     6 * @author sunwei
     7 * 
     8 */

     9public class MyObservable extends Observable
    10{
    11    public void setName(String name)
    12    {
    13        setChanged();
    14        notifyObservers();
    15    }

    16}

    17

    观察者类1

     1 package com.ztgame.pattern;
     2 
     3 import java.util.Observable;
     4 import java.util.Observer;
     5 /**
     6  * 观察者1
     7  * 
     8  * @author sunwei
     9  * 
    10  */
    11 public class Observer1 implements Observer
    12 {
    13     @Override
    14     public void update(Observable o, Object arg)
    15     {
    16         System.out.println("我是观察者1,我收到了我订阅的主题!");
    17     }
    18 }

    观察者类2

     1 package com.ztgame.pattern;
     2 
     3 import java.util.Observable;
     4 import java.util.Observer;
     5 /**
     6  * 观察者2
     7  * 
     8  * @author sunwei
     9  * 
    10  */
    11 public class Observer2 implements Observer
    12 {
    13     @Override
    14     public void update(Observable o, Object arg)
    15     {
    16         System.out.println("我是观察者2,我也收到了主题信息!");
    17     }
    18 }

    组织协调类

     1 public class LearnOb
     2 {
     3     public static void main(String[] args)
     4     {
     5         // 主题,被观察者
     6         MyObservable observable = new MyObservable();
     7         observable.addObserver(new Observer1());
     8         observable.addObserver(new Observer2());
     9         observable.setName("changed");
    10     }
    11 }


  • 相关阅读:
    E寻宝(贪心)
    千万别点进来,点进来你就哭了(最短路,dijkstra)
    H小明买年糕(前缀和+二分)
    Charles破解
    Jmeter安装插件
    appium环境搭建
    SourceTree安装和教程
    Appium-desktopAppium-desktop 安装与入门使用
    appium终端安装
    Seleinum_CSS定位方式
  • 原文地址:https://www.cnblogs.com/51cto/p/1414699.html
Copyright © 2011-2022 走看看