/**
* 设计模式(12)
* 观察者模式
*
* 这个模式的意思是
* 在某个特殊对象中绑定了一些观察者,当对象中的某个属性被改变时,发送消息通知观察者
*
* 该模式常用于触发试设计中, 用于保证各个对象的协作
*
*/
// 使用一个聊天室例子
//
// 服务器类
class Server {
// 一个list用来记录所有上线玩家(观察者)
private List<User> list = new ArrayList<>();
// 玩家上线
void userOnline(User user) {
list.add(user);
}
// 玩家说话 / 同时发送给所有玩家(观察者)
void userTalk(String str) {
for(User observer : list) {
observer.sbTalk(str);
}
}
}
// 用户类, 也是观察者
class User {
private Server server;
public User(Server server) {
this.server = server;
// 上线
server.userOnline(this);
}
// 自己说句话
void talk(String str) {
//
System.out.printf(": %s\n",str);
// 去通知所有玩家(观察者) 玩家说话了
server.userTalk(str);
}
// 有人说话了
void sbTalk(String str) {
System.out.printf("someone: %s\n",str);
}
}
// 测试
// Test Observer Pattern
public class main {
public static void main(String[] argv) {
Server server = new Server();
User billy = new User(server);
User jon = new User(server);
User alice = new User(server);
billy.talk("hello, everyone");
jon.talk("hi,i'm jon");
alice.talk("hi,i'm alice");
}
}
// 输出
/*
: hello, everyone
someone: hello, everyone
someone: hello, everyone
someone: hello, everyone
: hi,i'm jon
someone: hi,i'm jon
someone: hi,i'm jon
someone: hi,i'm jon
: hi,i'm alice
someone: hi,i'm alice
someone: hi,i'm alice
someone: hi,i'm alice
*/
转载于:https://my.oschina.net/tasker/blog/816439