java设计模式之观察者模式
以前看到一本介绍设计模式的书,名字我忘记了,要不就可以推荐给大家了。
下面的的讲解和示例,也是出自于那个书中的,凭记忆写给大家,如有不正确的,大家给我提意见我改正。
不说闲话了,进入正题。
引入一段孙子的话:知己知彼,百战不殆。
不知彼而知己,一胜一负。
不知必不知己,每战必殆。
了解自己很简单,因为是自己,那怎么了解他人每天行动呢,只能给他人身上安装监听器。
我们拿程序来说明孙子老爷爷的话。
首先定义一个他:Him,打仗嘛,无非就是武术和智商,除了天时地利以外。
package spring3.event; public class Him { private boolean isDoKungFu; private boolean isDoStudy; public void doKungFu() { System.out.println("他:开始练习武术了..."); this.isDoKungFu = true; } public void doStudy() { System.out.println("他:开始提高智商了..."); this.isDoStudy = true; } public boolean isDoKungFu() { return isDoKungFu; } public void setDoKungFu(boolean isDoKungFu) { this.isDoKungFu = isDoKungFu; } public boolean isDoStudy() { return isDoStudy; } public void setDoStudy(boolean isDoStudy) { this.isDoStudy = isDoStudy; } }
再来定义我, 我也要提高武术和智商,要比他高一点就行。
package spring3.event; public class Me { public void doKungFu() { System.out.println("我要练克制他的武术..."); } public void doStudy() { System.out.println("我要学习比他高的知识..."); } }
这样己和彼都建出来了,那怎样才能知彼呢?
我就需要一个监听器来监视他,哈哈,他还不知道
package spring3.event; public class Listener extends Thread { private Him him; private Me me; private String type; public Listener(Him him, Me me, String type) { this.him = him; this.me = me; this.type = type; } @Override public void run() { while (true) { // 监视他练武术 if (Const.KUNGFU.equals(this.type)) { // 发现他练武术,马上通知我了 if (this.him.isDoKungFu()) { this.me.doKungFu(); // 重新监视 this.him.setDoKungFu(false); } } // 监视他学习 if (Const.STUDY.equals(this.type)) { // 发现他学习,马上通知我了 if (this.him.isDoStudy()) { this.me.doStudy(); // 重新监视 this.him.setDoStudy(false); } } } } }
测试,看看效果
package spring3.event; public class Test { public static void main(String[] args) throws InterruptedException { Him him = new Him(); Me me = new Me(); Listener listener1 = new Listener(him, me, Const.KUNGFU); Listener listener2 = new Listener(him, me, Const.STUDY); // 开始监视 listener1.start(); listener2.start(); Thread.sleep(3000); him.doKungFu(); Thread.sleep(3000); him.doKungFu(); Thread.sleep(3000); him.doStudy(); Thread.sleep(3000); him.doStudy(); } }
结果:
他:开始练习武术了... 我要练克制他的武术... 他:开始练习武术了... 我要练克制他的武术... 他:开始提高智商了... 我要学习比他高的知识... 他:开始提高智商了... 我要学习比他高的知识...
常量文件
package spring3.event; public interface Const { String KUNGFU = "kungfu"; String STUDY = "study"; }
这样我就能随时随地的监视他了,所以孙子老爷爷真有先见之明阿,这样你还能战败吗?
相关推荐
Java设计模式是软件开发中的重要概念,它们是解决常见编程问题的经验总结,使得代码更加可复用、可扩展和易于维护。观察者模式(Observer Pattern)是这些模式中的一种,它在多对一的关系中使用,当一个对象的状态...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
**观察者模式(Observer Pattern)**是软件设计模式中的一种行为模式,它在Java中有着广泛的应用。这个模式的核心思想是“一对多”的依赖关系,即一个主题对象(Subject)可以被多个观察者(Observer)关注,当主题...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或者发布...
结合微信公众号讲解观察者模式,生动形象,关键是上手快啊
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...
首先,我们来看"Java设计模式——观察者模式的两种情况": 1. **主动通知**: 在这种情况下,被观察者对象在自身状态发生变化时,会主动调用`Observable`接口提供的`notifyObservers()`方法,将变化通知给所有注册的...
在Java编程领域,设计模式是一种被广泛采用的最佳实践,它为解决常见的软件设计问题提供...在Java中,`java.util.Observable`和`java.util.Observer`是内置的观察者模式实现,可以方便地用于快速构建观察者模式的系统。
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在软件开发中广泛应用于事件驱动...
在Java中,`java.util.Observable`和`java.util.Observer`接口提供了观察者模式的实现。例如,当我们有一个`WeatherStation`类(被观察者)和多个`WeatherDisplay`类(观察者)时,`WeatherStation`的气象数据变化会...
Java设计模式是软件工程中的一种最佳实践,它总结了在特定场景下解决常见问题的经验,为程序员提供了可重用的解决方案。本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,我们可以利用Java提供的...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它允许一个对象,当其状态发生改变时,能够自动通知所有依赖它的其他对象。在Java中,这种模式已经被内置到语言核心,使得开发者可以轻松地实现事件驱动...
- 观察者模式:定义对象之间的一对多依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新。 - 状态模式:允许对象在其内部状态改变时改变其行为,看起来像改变了它的类。 - 策略模式:...