1,定义:“对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖也他的对象都将得到通知并自动更新”。在java中,该模式是通过Observer接口和Observable类来实现的。
2,实例:为了更好的理解Observer模式,我们先从一个很实际的问题开始:该实例模拟的是一个大学的软件学院通知老师,学生,后勤等的一个过程。此过程我们先不去急着继承Obserbver和Observable这两个类,我们用最简单的代码来理解这个模式:
实例描述:一天一个IT的大师来到XX软件学院(softschool)来讲座,此时软件学院发出通知分别给老师(teacher),学生(student),还有管理后勤的工作人员(cleaner),此时的softschool就相当于该模式中的subject,而 teacher,student,cleaner则属于observer。下面是他们之间的模式图:
根据模式图我们来写代码:
1,subject类:
package soft.Observe;
public interface Subject {
public void register(Object object);
public void remove(Object object);
public void notifyObserver();
public void setMeeting(String meeting);
}
2,SoftSchool类
package soft.Observe;
import java.util.List;
import java.util.ArrayList;
public class SoftSchool implements Subject{
private List<Object> list = new ArrayList<Object>();
private String meeting;
public void register(Object object) {
list.add(object);
}
public void remove(Object object){
if(list.indexOf(object)>0){
int i = list.indexOf(object);
list.remove(i);
}
}
public void notifyObserver(){
for(int i= 0;i<list.size();i++)
{
Observer observer = (Observer)list.get(i);
observer.update(meeting);
}
}
public void setMeeting(String meeting){
this.meeting = meeting;
notifyObserver();
}
}
3,Observer接口
package soft.Observe;
public interface Observer {
public void update(String info);
}
4,Teacher类
package soft.Observe;
public class Teacher implements Observer{
public void update(String info)
{
System.out.println("Hi sir,today have a meeting about"+info);
}
}
5,Student类
package soft.Observe;
public class Student implements Observer{
public void update(String info)
{
System.out.println("Hi,Guys,today have a meeting about"+info);
}
}
6,Cleaner类
package soft.Observe;
public class Cleaner implements Observer{
public void update(String info)
{
System.out.println("Hi,Cleaners,today have a meeting about"+info);
}
}
7,TestObserver类(测试类)
package soft.Observe;
public class TestObserver {
public static void main(String args[])
{
Subject subject = new SubjectCenter();
Observer student = new Student();
Observer teacher = new Teacher();
Observer cleaner = new Cleaner();
subject.register(student);
subject.register(teacher);
subject.register(cleaner);
subject.setMeeting("Wrap-up meeting");
}
}
8,运行结果:
写道
Hi,Guys,today have a meeting aboutWrap-up meeting
Hi sir,today have a meeting aboutWrap-up meeting
Hi Cleaners,today have a meeting aboutWrap-up meeting
Process completed.
到这一步,大家肯定对Observer模式的概念有了一定的理解,但是到目前为止我们还有用到jdk已经写好的接口Observer和Observable类,下面我们深入的来将上面的例子改过来:(未完待续 请看第二部)
分享到:
相关推荐
全书共分为五个部分,内容由浅入深,逐步展开,旨在帮助读者掌握Cocoa设计模式的核心概念和实践技巧。书中还包含了大量代码示例,便于读者理解和实践。最后一部分是一个附录,提供了额外的参考资料,帮助读者进一步...
Observer模式是一种行为设计模式,允许一个对象在其状态改变时自动通知其他对象。在C#中,事件就是Observer模式的一种实现。通过订阅事件,一个对象(订阅者)可以监听另一个对象(发布者)的状态变化,并在变化发生...
委托 和 事件在 .Net Framework 中的应用非常广泛,然而,较好地理解委托和事件对很多 接触 C#时间不长的人来说并不容易。...中的委托和事件、委托和事件对 Observer 设计模式的意义,对它们的中间代码也做了讨论。
委托 和 事件在 .Net Framework中的应用...本文中,将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。
委托 和 事件在 .Net ...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。
委托 和 事件在 .Net Framework中的...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。
委托 和 事件在 .Net ...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。
委托 和 事件在 .Net ...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论
委托和事件在.NET Framework 中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不 长的人来说并不容易。它们就像是一道槛儿,过...托和事件对Observer 设计模式的意义,对它们的编译代码也做了讨论。 1.1
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解...本文将通过范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义...
委托 和 事件在 .Net ...本文中,将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。