观察者模式,老生常谈的问题了,相信大家都有所了解,这里用通俗的语言简单介绍一下!
概念:
顾名思义,"观察者" 存在,必然存在被观察者。JAVA 里面我们统称为对象。简单的说:比如
1.你参加高考,肯定会有监考老师,那么老师就是观察者,你就是被观察者。
2.当然观察者可以不只一个,可以存在多个观察者,同理被观察者也可以是多个,也就是多个老师观察多个学生。
3.老师肯定会观察你的考试是否存在zuobi行为,一旦发现任何zuobi行为,有的老师没收你的试卷,
有的老师可能去上报,也就是说观察者会根据你的行为采取不同的措施,来共同处理你zuobi这一行为。
4.特征:
你会发现观察者和被观察者,相对独立,学生考试,监考老师绝对不会打扰
同时观察者或者被观察者可以被重复利用,或者替换,也就是说,如果考试中途出现事故,可以有其他
老师代为监考。
下面我来简单设计一下。
1.我们要有学生:Students ,同时有考试和zuobi的能力:exam(),cheat()
2.我们要有老师:TeachearA,B,同时具有自己实现的行为:没收试卷,和上报
3.虽然不同观察者(老师),行为不同,但是他们都是内部实现不同,这里我们统一独立出来一个接口Observer,方法soSomething(),让观察者自己去实现
4.基本对象有了,我们还需要一个管理观察者 和 被观察者的监控管理器Observable,方便我们进行处理
看代码:
// 被观察者,学生 public class Students extends Observable{ // 被观察的行为--考试 public void exam(){ System.out.println("开始考试!"); // 开始zuobi if(cheat()){ // 激活状态,并 执行观察者操作 super.setChanged(); super.notifyObservers(); } } // 被观察的行为--zuobi private boolean cheat(){ System.out.println("开始zuobi啦"); return true; } }
// 这是一个老师观察者类 // 假设老师A ,发现了会没收试卷 public class TeacherA implements Observer{ @Override public void doSomething(Observable ob, Object o) { System.out.println(TeacherA.class.getName()+"没收试卷!"); } }
public class TeacherB implements Observer{ @Override public void doSomething(Observable ob, Object o) { System.out.println(TeacherB.class.getName()+"上报考试中心!"); } }
// 这个是观察者,接口,方便我们去实现 各个观察者的动作 public interface Observer { // 参数,可以在实现过程中,获得其他信息 // Observable:管理器,Object 被观察者 public void doSomething(Observable ob,Object o); }
// 观察者的一个管理器 public class Observable { private boolean isChanged = false; // 激活观察者触发 条件 public synchronized void setChanged(){ isChanged = true; } // 观察者集合,里面可以存放多个老师,Vector 是线程安全的 private Vector obs; public Observable(){ obs = new Vector(); } // 添加一个观察者 public void addObserver(Observer o){ if(o == null) throw new NullPointerException(); if(!obs.contains(o)){ obs.addElement(o); } public void notifyObservers(){ if(isChanged){ Object[] array = obs.toArray(); for(Object o : array){ Observer ob = (Observer) o; ob.doSomething(this, o); } } } // 返回观察者的个数 public int countObservers(){ return obs.size(); } }
public class Test{ public static void main(String[] args) { Students s = new Students(); TeacherA a = new TeacherA(); TeacherB b = new TeacherB(); s.addObserver(a); s.addObserver(b); s.exam(); } }
相关推荐
观察者模式,也称为发布-订阅模式或事件驱动模式,是一种行为设计模式,它定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 在C#、ASP.NET等.NET框架中,...
观察者模式(Observer Pattern)是软件设计模式中的行为模式之一,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或发布-...
总结来说,观察者模式是一种重要的设计模式,它允许对象在状态改变时自动通知其他对象,从而降低了系统各部分之间的耦合度,提高了代码的灵活性和可扩展性。在实际项目中,正确使用观察者模式可以有效地管理组件间的...
结合微信公众号讲解观察者模式,生动形象,关键是上手快啊
观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。该模式适用于需要在对象间建立动态的、松散耦合的关系的...
观察者模式是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这个模式在很多场景下都有广泛的应用,例如事件处理、...
基于MFC实现的消息监听机制,利用了设计模式中的观察者模式,对线程间的同步做了优化,以及可以选择消息的发送类型:同步或异步发送。对于监听者而言在注册监听的同时可以选择监听的消息类型,避免了发送者发送的...
JAVA-设计模式-行为型模式-观察者模式
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
Android设计模式--观察者模式DEMO 观察者模式是一个使用频率非常高的模式,他最常用的地方是GUI系统和订阅-发布系统。 该模式的最重要的作用就是解耦,使观察者和被观察者之间依赖尽可能小,甚至好无依赖。
观察者模式(Observer Pattern)是行为设计模式的一种,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心思想是发布-订阅模型,其中...
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它在C++中的应用广泛且实用。这种模式的核心思想是“主体”(Subject)与“观察者”(Observer)之间的松耦合关系,允许一个对象(即主体)的状态...
c++设计模式-行为型模式-观察者模式;qt工程;c++简单源码; 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...
观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心思想是主体(Subject)与观察者(Observer)之间的...
观察者模式(Observer Pattern)是其中一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 在Java中,观察者模式通常通过`java.util....