《设计模式》一书对Observer是这样描述的:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并自动更新。
举个例子,在现实生活中,父母与孩子是最亲密的人。父母做为孩子(被观察者)的监护人(观察者),当孩子和别人打架后,一定会告诉他的父母这件事(呵呵,当孩子很小时,通常会告诉父母,长大了以后,可能不会,这里的孩子指的是小孩子),当孩子获得奖学金后,也一定会告诉他的父母。下面我用Observer实现这个程序。代码如下:
import java.util.Vector;
class Children{
static private Vector<Observer> obs;
static private String state=null;
static{
obs=new Vector<Observer>();
}
public static void attach(Observer o){
obs.addElement(o);
}
public static void detach(Observer o){
obs.removeElement(o);
}
public void setState(String str){
state=str;
}
public String getState(){
return state;
}
public void notifyObs(){
for(Observer o:obs){
o.update(this);
}
}
}
interface Observer{
public void update(Children child);
}
class Parent implements Observer{
public void update(Children child){
if(child.getState().equals("fight")){
System.out.println("Parent,他和别人打架了");
}else if(child.getState().equals("scholarship")){
System.out.println("告诉Parent,他得到了奖学金");
}
}
}
class Mother implements Observer{
public void update(Children child){
if(child.getState().equals("fight")){
System.out.println("告诉Mother,他和别人打架了");
}else if(child.getState().equals("scholarship")){
System.out.println("告诉Mother,他得到了奖学金");
}
}
}
public class Client {
public static void main(String[] args) {
Children child=new Children();
Observer parent=new Parent();
Observer mother=new Mother();
child.attach(parent);
child.attach(mother);
child.setState("fight");
child.notifyObs();
child.setState("scholarship");
child.notifyObs();
}
}
输出如下:
告诉Parent,他和别人打架了
告诉Mother,他和别人打架了
告诉Parent,他得到了奖学金
告诉Mother,他得到了奖学金
小结:对于Observer模式,触发事件的对象-Subject对象无法预测可能需要知道该事件的所有对象。为了解决这一问题,我们创建一个Observer接口,要求所有的Observer负责将自己注册到Subject上。
分享到:
相关推荐
总的来说,HeadFirst设计模式的学习笔记2关于观察者模式的演示,旨在帮助开发者理解如何使用观察者模式来构建可扩展的系统。通过实际的代码示例,我们可以更深入地掌握这一模式,并将其应用到日常开发中,提升代码的...
本学习笔记将重点关注“观察者模式”,这是一种行为设计模式,用于在对象之间定义一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的主要组成部分包括...
这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...
C#设计模式学习笔记是一份详尽的资源,适合任何希望深入了解如何在C#编程中应用设计模式的开发者。这份笔记涵盖了多种设计模式,旨在提升代码的可读性、可维护性和可扩展性,这些都是软件开发中至关重要的要素。 ...
在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...
这份"图解java设计模式_学习笔记"是针对Java开发者深入理解和应用设计模式的重要资源。在这里,我们将深入探讨Java设计模式的核心概念、分类以及它们在实际开发中的应用。 设计模式分为三大类:创建型、结构型和...
在《Head First 设计模式学习笔记(十四)模式的组合使用》中,作者探讨了如何在实际编程中灵活地组合多种设计模式以解决复杂问题。这篇文章可能是基于《Head First 设计模式》这本书的一个章节,该书是设计模式领域...
"GoF 23种设计模式学习笔记" 是一个深入探讨这23个经典设计模式的资源,这些模式最初由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者在1994年的著作《设计模式:可复用面向对象软件的基础》中...
### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...
### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...
10. 观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 11. 备忘录模式(Memento Pattern):在不破坏封装的前提下,...
文档中的“23种设计模式学习笔记.doc”可能包含了对这23种模式的详细解释和实例,而“设计模式之我爱我家.doc”可能从一个更生活化的角度来阐述设计模式的概念。“软件23种设计模式,超级经典的.pdf”可能是对这些...
在Head First的观察者模式学习笔记中,我们可以深入理解这个模式的原理和应用。首先,观察者模式涉及到两个主要的角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它可以是任何具有可变状态的对象...
通过《HeadFirst设计模式笔记》的学习,你将能够掌握如何在代码中正确地应用Observer模式,提升软件的可维护性和扩展性。同时,配合源码分析,能帮助你更好地理解设计模式的实现细节,提高编程技巧和解决问题的能力...
通过阅读这份笔记,读者不仅可以学习到设计模式的基本概念,还能了解到如何在Java环境中实际运用这些模式,提升编程技能。设计模式的学习和掌握是成为一名优秀程序员的必经之路,它们能帮助我们写出更高效、更灵活、...
在《23个设计模式图解--学习笔记》中,我们探讨了这些模式,以便于理解和应用到实际开发中。以下是这23个设计模式的详细说明: 1. **工厂方法**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化...
总之,“设计模式的读书总结笔记”是一份宝贵的资源,它可以帮助开发者系统地学习和掌握设计模式,提升软件设计的质量和效率。无论是初学者还是经验丰富的开发者,都可以从中受益匪浅。通过深入学习和实践,我们可以...
行为型模式关注对象之间的职责分配,如策略模式(Strategy)、观察者模式(Observer)和责任链模式(Chain of Responsibility)。策略模式定义了一族算法,将每个算法封装起来,使它们可以互相替换,让算法的变化...
观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件监听和发布订阅系统。 5. **单例模式...