摘要:本文深入浅出的讲述了设计模式中的
模式属于行为型模式,其意图是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在制作系统的过程中,将一个系统分割成一系列相互协作的类有一个常见的副作用:需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,因为这样降低了他们的可充用性。这一个模式的关键对象是目标(Subject
)。一个目标可以有任意数目的依赖它的观察者,一旦目标的状态发生改变,所有的观察者都得到通知,作为对这个通知的响应,每个观察者都将查询目标以使其状态与目标的状态同步。这种交互也称为发布-
适用性:在以下的任一情况下可以使用观察者模式:
l
当对一个对象的改变需要同时改变其它对象,而不知道具体由多少对象有待改变。
l
例如:老师又电话号码,学生需要知道老师的电话号码以便于在合时的时候拨打,在这样的组合中,老师就是一个被观察者(
所示:
![](https://i-blog.csdnimg.cn/blog_migrate/1153e292f87ca0c1bd59945730f681bf.gif)
1
参与者:
:
目标知道它的观察者。可以有任意多个观察者观察同一个目标。
观察者,
具体目标,
将有关状态存入各
当他的状态发生改变时,向他的各个观察者发出通知。
:
对象的引用。
实现
协作关系:
发生任何可能导致其观察者与其本身状态不一致的改变时,他将通知他的各个观察者。
对象可向目标对象查询信息。
相关代码:
public
Subject{
voidpublic
notice();
代码:
public
Observer{
}
observer;
public
Teacher
phoneprivate;
Teacher(){
=
new
void
students
void
students
void
for
i=0;i<
((Observer)
}
phone }
String getPhone(){
}
代码:
public
Student
nameprivate;
Teacher
nameteacher voidout+"\nTeacher'sphone:");
public
update(){
=
}
代码:
import
static main(String[] args){
Vector();
Teacher();
(
Student st = "lili" t.attach(st);
"88803807"
for
i=0;i<10;i++)
"88808880"
for
i=0;i<10;i++)
}
模式的最知名的应用是在MVC模式可以很好的应用在文档和图表程序的制作中。