Chapter 14 观察者模式
观察者模式又叫做发布-订阅模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体,从而使得各自的变化都不会影响另一边的变化。
代码如下:
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 观察者模式的更多相关文章
- 零元学Expression Blend 4 - Chapter 14 用实例了解布局容器系列-「Pathlistbox」II
		
原文:零元学Expression Blend 4 - Chapter 14 用实例了解布局容器系列-「Pathlistbox」II 本章将延续上一章的范例,步骤解析. 本章将延续上一章的范例,步骤解析 ...
 - Chapter 14. Blocks and Statements
		
14.5. Statements There are many kinds of statements in the Java programming language. Most correspon ...
 - Chapter 14 G-estimation of Structural Nested Models
		
目录 14.1 The causal question revisited 14.2 Exchangeability revisited 14.3 Structural nested mean mod ...
 - Thinking in Java Chapter 14
		
From Thinking in Java 4th Edition RTTI(Run-Time Type Information),运行时类型信息,使得你可以在程序运行时发现和使用类型信息.对RTTI ...
 - [using_microsoft_infopath_2010]Chapter 14高级话题
		
本章提要: 1.剖析表单逻辑 2.从多个表单中合并数据 3.重新连接XML表单到XSN模板文件 4.在repeating table中设置默认值 5.离线填写表单的权衡
 - Chapter 6 — Improving ASP.NET Performance
		
https://msdn.microsoft.com/en-us/library/ff647787.aspx Retired Content This content is outdated and ...
 - Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Services
		
本文内容为转载,供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Servi ...
 - 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 ...
 - Professional C# 6 and .NET Core 1.0 - Chapter 42 ASP.NET Web API
		
本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处: -------------------------------------------------------- ...
 
随机推荐
- 转: 关于viewport的理解
			
最近我做了一点儿针对手机的Web开发和相关研究.按说,Web自设计之初,就已经考虑了设备无关性.然而,现实总是不尽如人意. 我们知道大多数网页都是针对桌面显示器开发和测试的,但是手机屏幕通常要比桌面显 ...
 - BZOJ 1022 小约翰的游戏 (Anti-Nim游戏)
			
题解:注意题目中规定取到最后一粒石子的人算输,所以是Anti-Nim游戏,胜负判断为: 先手必胜: 1.所有堆的石子数都为1且游戏的SG值为0: 2.有些堆的石子数大于1且游戏的SG值不为0. #in ...
 - C语言参数传递
			
//--------------------单向值传递------------------------ // swap这个方法在被调用时,给形参a,b分配了空间 // 主调函数将[数值]传递给[形参] ...
 - poj 3335 Rotating Scoreboard - 半平面交
			
/* poj 3335 Rotating Scoreboard - 半平面交 点是顺时针给出的 */ #include <stdio.h> #include<math.h> c ...
 - Android Material Design-Creating Apps with Material Design(用 Material Design设计App)-(零)
			
转载请注明出处:http://blog.csdn.net/bbld_/article/details/40400031 翻译自:http://developer.android.com/trainin ...
 - Java面向对象的编程
			
类的多态性: Java语言中含有方法重载与成员覆盖两种形式的多态:(区别于c++) 方法重载:在一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同. 成员覆盖:子类与父类允许具有 ...
 - 优酷DEMO
			
http://v.youku.com/v_show/id_XMTQxOTc4ODA4OA==.html http://v.youku.com/v_show/id_XMTQxOTc5MjU1Mg==.h ...
 - 「C」 数组、字符串、指针
			
一.数组 (一)数组 概念:用来存储一组数据的构造数据类型 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. (二)数组的定义 格式: 类型 数组名[元素个数 ...
 - Java 操作mongodb
			
package cn.test.db; import java.io.File; import java.io.IOException; import java.net.UnknownHostExce ...
 - HYSBZ 2301
			
/*** 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数 **/ #include <iost ...