网络上看到一道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)
我们不去指责所谓参考答案的正确与否。
我们是否应该想一想,怎么才能正确合理的使用设计模式?
分享到:
相关推荐
观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动编程中,比如用户界面组件的交互或者消息系统的...
### 设计模式——观察者模式详解 #### 一、引言 在软件工程领域,设计模式是一种被广泛采用的方法论,用于解决常见的编程问题。本文将深入探讨《设计模式(极力推荐)》这本书中提到的一个关键模式——观察者模式。...
3. 行为型模式:这一类模式关注对象之间的交互和责任分配,包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、访问者模式...
2. **观察者模式**:在多线程环境中,观察者模式常用于实现线程间的通信,其中一个对象(主题)的状态改变时会通知所有依赖于它的观察者对象,使得它们能够自动更新自己的状态。 3. **职责链模式**:这种模式可以...
3. 行为型模式(Behavioral Patterns):如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、责任链模式(Chain of Responsibility)、命令模式(Command...
行为型模式则关注对象间的交互和责任分配,例如策略模式(Strategy)、观察者模式(Observer)和责任链模式(Chain of Responsibility)。 JAVA设计模式是Java开发中的核心部分,因为Java语言的特性使得许多设计...
行为型模式主要处理对象间的行为和责任分配,如观察者模式(Observer)和策略模式(Strategy)。结构型模式则涉及对象的组合和结构,比如适配器模式(Adapter)和装饰器模式(Decorator)。 在J2EE环境中,设计模式...
此外,文中还提到了其他设计模式在报表系统中的应用,如观察者(Observer)模式,用于实现模型和视图之间的实时同步,当模型数据发生变化时,观察者(视图)会收到通知并作出响应。适配器模式(Adapter)则帮助不同...
书中可能涉及了如单例模式(Singleton)、工厂模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、观察者模式(Observer)、装饰器模式(Decorator)、代理模式(Proxy)、策略模式...
- **观察者模式**(Observer):当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - **命令模式**(Command):将请求封装为一个对象,从而使用户可以用不同的请求对客户端进行参数化;对...
观察者模式(Observer),用于实现对象间的发布-订阅通信。 2. **架构模式**:如分层架构(Layered Architecture),通过分离关注点提高系统的可维护性;服务导向架构(SOA),强调服务的独立性和互操作性;微服务...
行为型模式则涉及对象间的通信和责任分配,如观察者模式(Observer)、策略模式(Strategy)和命令模式(Command)等。 通过学习设计模式,开发者可以更好地理解和应用这些经过验证的解决方案,避免重复发明轮子,...
3. 观察者模式(Observer Pattern):这是一种行为设计模式,允许一个对象(观察者)观察另一个对象(主题),并在主题状态改变时自动通知观察者。在蛋糕订做系统中,当有新的订单或者库存变化时,可以通过观察者...
- 观察者模式(Observer) - 状态模式(State) - 策略模式(Strategy) - 模板方法模式(Template Method) - 访问者模式(Visitor) #### 如何有效学习设计模式 1. **理论结合实践**:理论知识是基础,但更...
- **观察者模式**(Observer) - 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - 观察者模式适用于需要多个对象监听另一个对象的变化的场景。 - ...
观察者模式(Observer)定义了一种一对多的依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新;责任链模式(Chain of Responsibility)避免对象间耦合,将请求沿着处理者链传递;还有...
- 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。 - 状态模式(State):允许一个对象在其内部状态改变时改变它的行为,...
- 观察者模式(Observer Pattern) - 状态模式(State Pattern) - 策略模式(Strategy Pattern) - 模板方法模式(Template Method Pattern) - 访问者模式(Visitor Pattern) 除了这23种经典设计模式外,...
行为型模式则关注对象间通信和职责分配,例如策略模式(Strategy)、观察者模式(Observer)和责任链模式(Chain of Responsibility)。 描述中的"部分例子"可能涵盖了这些设计模式的实际应用,例如: 1. **单例...