`
Aspen
  • 浏览: 8645 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

论观察者模式(Observer)的使用

阅读更多

网络上看到一道JAVA试题:

<!----><!---->

房间里有猫、狗和人,半夜狗和人都睡了。突然猫叫,狗和人同时被猫叫惊醒。请用 java 程序模拟猫叫同时惊醒狗和人。

 

给出的参考答案如下:

 

import java.util.Observable;
import java.util.Observer;

class Cat extends Observable{
	/**
	 * 猫叫
	 */
	public void barking(){
		super.setChanged();
		System.out.println("猫叫");
		super.notifyObservers();
	}
}


 class Dog implements Observer{

	public void update(Observable o, Object arg) {
		System.out.println("狗惊醒");		
	}
}

class Person implements Observer{

	public void update(Observable o, Object arg) {		
		System.out.println("人惊醒");		
	}
}

public class Foo {
	
	public static void main(String[] args) {
		Cat cat = new Cat();
		cat.addObserver(new Dog());
		cat.addObserver(new Person());
		cat.barking();
	}

}

 代码当中用到了 观察者模式(Observer),啧啧一看,感觉不错。

运行结果:

猫叫
人惊醒
狗惊醒

 

可能细心的读者已发现,上述 观察者模式(Observer)的运用,真的能达到题目要求吗?

也就是说:猫叫真的能同时惊醒狗和人? 

 

 

稍作代码调整:

 

 class TireException extends RuntimeException{	 
	private static final long serialVersionUID = 1L;

	public TireException(String message) {
		super(message);
	}
	 
 }

class Person implements Observer{

	@Override
	public void update(Observable o, Object arg) {
		if( true )
			throw new TireException("太疲劳");
		System.out.println("人惊醒");		
	}
}

 这是你会发现,如果人太疲劳,没有被猫吵醒。狗也醒不来了。

 

运行结果:

猫叫
Exception in thread "main" TireException: 太疲劳
	at Person.update(Foo.java:38)
	at java.util.Observable.notifyObservers(Unknown Source)
	at java.util.Observable.notifyObservers(Unknown Source)
	at Cat.barking(Foo.java:11)
	at Foo.main(Foo.java:49)

我们不去指责所谓参考答案的正确与否。

我们是否应该想一想,怎么才能正确合理的使用设计模式?

分享到:
评论

相关推荐

    敏捷开发,设计模式之观察者模式

    观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动编程中,比如用户界面组件的交互或者消息系统的...

    设计模式(极力推荐)第二部分

    ### 设计模式——观察者模式详解 #### 一、引言 在软件工程领域,设计模式是一种被广泛采用的方法论,用于解决常见的编程问题。本文将深入探讨《设计模式(极力推荐)》这本书中提到的一个关键模式——观察者模式。...

    毕业论文的设计模式4321

    3. 行为型模式:这一类模式关注对象之间的交互和责任分配,包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、访问者模式...

    Java 多线程编程中的设计模式~

    2. **观察者模式**:在多线程环境中,观察者模式常用于实现线程间的通信,其中一个对象(主题)的状态改变时会通知所有依赖于它的观察者对象,使得它们能够自动更新自己的状态。 3. **职责链模式**:这种模式可以...

    java设计模式中英文各种版本打包下载 学习设计模式必备材料

    3. 行为型模式(Behavioral Patterns):如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、责任链模式(Chain of Responsibility)、命令模式(Command...

    非常有用的设计模式小合集

    行为型模式则关注对象间的交互和责任分配,例如策略模式(Strategy)、观察者模式(Observer)和责任链模式(Chain of Responsibility)。 JAVA设计模式是Java开发中的核心部分,因为Java语言的特性使得许多设计...

    设计模式的应用--论文素材2

    行为型模式主要处理对象间的行为和责任分配,如观察者模式(Observer)和策略模式(Strategy)。结构型模式则涉及对象的组合和结构,比如适配器模式(Adapter)和装饰器模式(Decorator)。 在J2EE环境中,设计模式...

    设计模式的应用--论文素材设计模式的应用--论文素材

    此外,文中还提到了其他设计模式在报表系统中的应用,如观察者(Observer)模式,用于实现模型和视图之间的实时同步,当模型数据发生变化时,观察者(视图)会收到通知并作出响应。适配器模式(Adapter)则帮助不同...

    C#设计模式与源码,高手必修

    书中可能涉及了如单例模式(Singleton)、工厂模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、观察者模式(Observer)、装饰器模式(Decorator)、代理模式(Proxy)、策略模式...

    设计模式书记pdf

    - **观察者模式**(Observer):当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - **命令模式**(Command):将请求封装为一个对象,从而使用户可以用不同的请求对客户端进行参数化;对...

    使用 Microsoft.NET.的企业解决方案模式

    观察者模式(Observer),用于实现对象间的发布-订阅通信。 2. **架构模式**:如分层架构(Layered Architecture),通过分离关注点提高系统的可维护性;服务导向架构(SOA),强调服务的独立性和互操作性;微服务...

    設計模式電子書01

    行为型模式则涉及对象间的通信和责任分配,如观察者模式(Observer)、策略模式(Strategy)和命令模式(Command)等。 通过学习设计模式,开发者可以更好地理解和应用这些经过验证的解决方案,避免重复发明轮子,...

    设计模式.zip

    3. 观察者模式(Observer Pattern):这是一种行为设计模式,允许一个对象(观察者)观察另一个对象(主题),并在主题状态改变时自动通知观察者。在蛋糕订做系统中,当有新的订单或者库存变化时,可以通过观察者...

    Gof设计模式双语版

    - 观察者模式(Observer) - 状态模式(State) - 策略模式(Strategy) - 模板方法模式(Template Method) - 访问者模式(Visitor) #### 如何有效学习设计模式 1. **理论结合实践**:理论知识是基础,但更...

    java_23种设计模式.pdf

    - **观察者模式**(Observer) - 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - 观察者模式适用于需要多个对象监听另一个对象的变化的场景。 - ...

    设计模式可复用面向对象软件的基础PDF.rar

    观察者模式(Observer)定义了一种一对多的依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新;责任链模式(Chain of Responsibility)避免对象间耦合,将请求沿着处理者链传递;还有...

    设计模式大全(word)

    - 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。 - 状态模式(State):允许一个对象在其内部状态改变时改变它的行为,...

    java开发设计模式

    - 观察者模式(Observer Pattern) - 状态模式(State Pattern) - 策略模式(Strategy Pattern) - 模板方法模式(Template Method Pattern) - 访问者模式(Visitor Pattern) 除了这23种经典设计模式外,...

    C++设计模式和部分例子

    行为型模式则关注对象间通信和职责分配,例如策略模式(Strategy)、观察者模式(Observer)和责任链模式(Chain of Responsibility)。 描述中的"部分例子"可能涵盖了这些设计模式的实际应用,例如: 1. **单例...

Global site tag (gtag.js) - Google Analytics