【观察者模式应用场景举例】
比如在玩“极品飞车”这款游戏,每一个车手到达终点的时候,都会在其它车手的屏幕上显示:某某人以多少时间到达终点的提示,其实这就是一个典型的观察者模式的应用,观察者模式即是典型的双向一对多的应用场景下用一的一端来通知多的一端。
【观察者模式解释】
类型:行为模式
定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象的状态发生改变时,会通知所有的观察者对象,使它们能够自己更新自己。
【观察者模式UML图】
【观察者模式-JAVA代码实现】
新建抽象发布通知父类:
package
carer_subject;
import
java.util.ArrayList;
import
java.util.List;
import
carer_observer.carer_observer;
public
interface
carer_subject_parent {
public
void
set_state(String state_string);
public
String get_state();
public
void
add_observer(carer_observer carer_observer_ref);
public
void
sub_observer(carer_observer carer_observer_ref);
public
void
notityAllCarer();
}
新建发布通知实现类:
package
carer_subject;
import
java.util.ArrayList;
import
java.util.List;
import
carer_observer.carer_observer;
public
class
carer_subject_sub
implements
carer_subject_parent {
List
<
carer_observer
>
list_observer
=
new
ArrayList
<
carer_observer
>
();
private
String state;
public
void
set_state(String state_string) {
this
.state
=
state_string;
}
public
String get_state() {
return
state;
}
public
void
add_observer(carer_observer carer_observer_ref) {
list_observer.add(carer_observer_ref);
}
public
void
sub_observer(carer_observer carer_observer_ref) {
list_observer.remove(carer_observer_ref);
}
public
void
notityAllCarer() {
state
=
"
到达终点
"
;
for
(
int
i
=
0
; i
<
list_observer.size(); i
++
) {
list_observer.get(i).show_info();
}
}
}
新建观察者接口:
package
carer_observer;
import
carer_subject.carer_subject_parent;
public
interface
carer_observer {
public
void
show_info();
}