需要解决的问题:
由于对象的某些状态发生了变化,而要通知其他与此状态有关联的对象进行更新。
具体事例:
当我对设置的姓名以及密码(观察对象)进行更改时,希望有关由此保密信息的其他对象(观察者)感知到,进而进行更新处理或者其他业务处理。
具体实施步骤:
1、注册需要对象观察的信息。(本例即姓名以及密码)
2、实现于此信息相关的对象的接收方法。(本例即姓名密码更改后,需要更新的对象)
代码模板:
需要感知的对象。
import java.util.Observable;
public class MyObservable extends Observable {
private String name;
private String password;
public void setName(String name) {
this.name = name;
super.setChanged();
super.notifyObservers("名称:"+name);
}
public void setPassword(String password) {
this.password = password;
super.setChanged();
super.notifyObservers("密码:"+password);
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
}
对象更改后,需要更新的第一个观察者。
import java.util.Observable;
import java.util.Observer;
public class MyFirObserver implements Observer {
public void update(Observable o, Object arg) {
System.out.println("第一个观察者:知道改变了" + arg);
}
}
对象更改后,需要更新的第二个观察者。
import java.util.Observable;
import java.util.Observer;
public class MySedObserver implements Observer {
public void update(Observable o, Object arg) {
System.out.println("第二个观察者:知道改变了" + arg);
}
}
测试代码:
public class Test {
public static void main(String[] args) {
MyObservable observable = new MyObservable();
Observer fir = new MyFirObserver();
Observer sed = new MySedObserver();
observable.addObserver(sed);
observable.addObserver(fir);
observable.setName("FIRST NAME");
observable.setPassword("FIRST PASSWORD");
observable.setName("SECOND NAME");
observable.setPassword("SECOND PASSWORD");
}
}
执行结果:
第一个观察者:知道改变了名称:FIRST NAME
第二个观察者:知道改变了名称:FIRST NAME
第一个观察者:知道改变了密码:FIRST PASSWORD
第二个观察者:知道改变了密码:FIRST PASSWORD
第一个观察者:知道改变了名称:SECOND NAME
第二个观察者:知道改变了名称:SECOND NAME
第一个观察者:知道改变了密码:SECOND PASSWORD
第二个观察者:知道改变了密码:SECOND PASSWORD
说明:
Observer(观察者)模式,顾名思义,就是需要改变的对象似乎是一个旁观者,当我发现我关心的对象改变时,我自己也要做相应的调整。
实际应用生活中的例子就比如:
生产的香烟的成本变动了,商店销售的此种品牌的香烟价格也要做相应的调整。
水涨船高,其实水就是观察对象,船就成了观察者(实际生活中传不变是不成立的,程序设计中可就要自己考虑了)。
希望不吝指教,谢谢。
分享到:
相关推荐
Observer模式,也被称为“发布-订阅”模式,是软件设计模式中的行为模式之一。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。Observer模式是实现...
这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现发布-订阅...
C#设计模式学习笔记是一份详尽的资源,适合任何希望深入了解如何在C#编程中应用设计模式的开发者。这份笔记涵盖了多种设计模式,旨在提升代码的可读性、可维护性和可扩展性,这些都是软件开发中至关重要的要素。 ...
以上只是部分Java设计模式的介绍,实际的“DesignPatterns”压缩包可能包含了这些模式的源代码实现,通过阅读和学习这些代码,开发者可以更好地理解和运用设计模式,提升代码质量。同时,结合博主提供的博客链接,...
Observer设计模式,也被称为“发布-订阅”(Publish-Subscribe)模式或“依赖倒置”模式,是软件设计中的一种行为模式。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到...
在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...
本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...
本学习笔记将重点关注“观察者模式”,这是一种行为设计模式,用于在对象之间定义一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的主要组成部分包括...
通过深入学习《设计模式——Java语言中的应用》,开发者能够更好地理解和应用这些模式,从而编写出更加高效、可扩展的Java程序。无论是初级开发者还是经验丰富的程序员,都应该不断探索和实践设计模式,以提升自己的...
总的来说,HeadFirst设计模式的学习笔记2关于观察者模式的演示,旨在帮助开发者理解如何使用观察者模式来构建可扩展的系统。通过实际的代码示例,我们可以更深入地掌握这一模式,并将其应用到日常开发中,提升代码的...
观察者模式(Observer)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在C++中广泛应用,特别是在需要...
### 设计模式精解——GoF23中设计模式解析 #### 重要性与起源 设计模式是软件工程领域的一项重要研究,它提供了一系列解决常见软件设计问题的模板。GoF23指的是由Erich Gamma、Richard Helm、Ralph Johnson和John ...
"GoF 23种设计模式学习笔记" 是一个深入探讨这23个经典设计模式的资源,这些模式最初由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者在1994年的著作《设计模式:可复用面向对象软件的基础》中...
### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...
C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...
这份"图解java设计模式_学习笔记"是针对Java开发者深入理解和应用设计模式的重要资源。在这里,我们将深入探讨Java设计模式的核心概念、分类以及它们在实际开发中的应用。 设计模式分为三大类:创建型、结构型和...
在《Head First 设计模式学习笔记(十四)模式的组合使用》中,作者探讨了如何在实际编程中灵活地组合多种设计模式以解决复杂问题。这篇文章可能是基于《Head First 设计模式》这本书的一个章节,该书是设计模式领域...
本篇文章将深入探讨“Observer”观察者模式,这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心概念是主题...