观察者模式又叫做发布-订阅模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体,从而使得各自的变化都不会影响另一边的变化。

代码如下:

package xiao;

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

interface Subject{
    void Attach(Observer observer);
    void Detach(Observer observer);
    void Notify();
    String getSubjectState();
    void setSubjectState(String subjectState);
}

abstract class Observer{
    protected String name;
    protected Secretary sub;
    public abstract void update();
}
class Secretary implements Subject{
    private List<Observer> observers = new ArrayList<Observer>();
    private String subjectState;
    public void Attach(Observer observer){
        observers.add(observer);
    }
    public void Detach(Observer observer){
        observers.remove(observer);
    }
    public void Notify(){
        for(Observer o:observers){
            o.update();
        }
    }
    public String getSubjectState() {
        return subjectState;
    }
    @Override
    public void setSubjectState(String subjectState) {
        this.subjectState = subjectState;
        
    }
}

class StockObserver extends Observer
{
    public StockObserver(String name,Secretary sub){
        this.name = name;
        this.sub = sub;
    }
    public void update(){
        System.out.println(sub.getSubjectState()+this.name+"关闭股票,继续工作");
    }
}
class NBAObserver extends Observer
{
    public NBAObserver(String name,Secretary sub){
        this.name = name;
        this.sub = sub;
    }
    public void update(){
        System.out.println(sub.getSubjectState()+this.name+"关闭NBA,继续工作");
    }
}

public class abc {
    public static void main(String[] args) {
        Secretary tongzizhe = new Secretary();
        StockObserver tongshi1 = new StockObserver("mike", tongzizhe);
        NBAObserver tongshi2 = new NBAObserver("dave", tongzizhe);
        tongzizhe.Attach(tongshi2);
        tongzizhe.Attach(tongshi1);
        tongzizhe.setSubjectState("boss is coming ");
        tongzizhe.Notify();
    }
}

Chapter 14 观察者模式的更多相关文章

  1. 零元学Expression Blend 4 - Chapter 14 用实例了解布局容器系列-「Pathlistbox」II

    原文:零元学Expression Blend 4 - Chapter 14 用实例了解布局容器系列-「Pathlistbox」II 本章将延续上一章的范例,步骤解析. 本章将延续上一章的范例,步骤解析 ...

  2. Chapter 14. Blocks and Statements

    14.5. Statements There are many kinds of statements in the Java programming language. Most correspon ...

  3. Chapter 14 G-estimation of Structural Nested Models

    目录 14.1 The causal question revisited 14.2 Exchangeability revisited 14.3 Structural nested mean mod ...

  4. Thinking in Java Chapter 14

    From Thinking in Java 4th Edition RTTI(Run-Time Type Information),运行时类型信息,使得你可以在程序运行时发现和使用类型信息.对RTTI ...

  5. [using_microsoft_infopath_2010]Chapter 14高级话题

    本章提要: 1.剖析表单逻辑 2.从多个表单中合并数据 3.重新连接XML表单到XSN模板文件 4.在repeating table中设置默认值 5.离线填写表单的权衡

  6. Chapter 6 — Improving ASP.NET Performance

    https://msdn.microsoft.com/en-us/library/ff647787.aspx Retired Content This content is outdated and ...

  7. Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Services

    本文内容为转载,供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Servi ...

  8. CHAPTER 7 Science in Islam 第7章 伊斯兰中的科学

    CHAPTER 7 Science in Islam 第7章 伊斯兰中的科学 Galen did not live to see the decline of the Roman Empire, bu ...

  9. Professional C# 6 and .NET Core 1.0 - Chapter 42 ASP.NET Web API

    本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处: -------------------------------------------------------- ...

随机推荐

  1. NET Core Docker部署

    NET Core Docker部署 前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行 ...

  2. EventStore的设计思路

    EventStore的设计思路 最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event ...

  3. poj 1386 Play on Words(有向图欧拉路+并查集)

    题目链接:http://poj.org/problem?id=1386 思路分析:该问题要求判断单词是否能连接成一条直线,转换为图论问题:将单词的首字母和尾字母看做一个点,每个单词描述了一条从首字母指 ...

  4. zend framework多模块配置

    上次接触zend framework已经很久远了,10年的事情了.最近在做一个项目,时间不紧,就又把ZF拿出来折腾.而我发现以前做ZF的记忆已经在我脑中如梦幻泡影,消失无踪,为了配置多模块还又去查了资 ...

  5. 搜狗2015校园招聘javaproject师面经

    面试时看到了我的笔试题.真是慘不忍睹啊. . 1. 问回去有没有研究一下笔试题 木有,果断后面悲剧了 2. 解释一下笔试的一道选择题: 下列哪种操作可能带来死锁? A: lock(m1) lock(m ...

  6. Python:2D画图库matplotlib学习总结

    本文为学习笔记----总结!大部分为demo.一部分为学习中遇到的问题总结.包含怎么设置标签为中文等.matlab博大精深.须要用的时候再继续吧. Pyplot tutorial Demo地址为:点击 ...

  7. POJ 2695 The Pilots Brothers' refrigerator(神奇的规律)

    转载请注明出处:http://blog.csdn.net/a1dark 分析:如果想要将一个“+”翻转成“-”,那么必然会把对应的行和列上的所有点翻转一次.由于一个点翻偶数次就相当于不翻转.所以我需要 ...

  8. SGU 202 The Towers of Hanoi Revisited (DP+递归)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意 :n个圆盘,m个柱子的汉诺塔输出步骤. ht ...

  9. openstack之keystone

    一.什么是keystone 用于为openstack家族中的其它组件成员提供统一的认证服务,包括身份认证.令牌发放和校验.服务列表.用户权限定义等: 基本概念: 用户User:用于身份认证.一个用户可 ...

  10. 百度前端技术学院Html&CSS学习资源

    Web相关名词通俗解释 https://www.zhihu.com/question/22689579 MDN HTML入门 https://developer.mozilla.org/zh-CN/d ...