package Observer_pattern;
/*
在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。
就比方说下面的一个简单例子,通过WeChat来告诉User做什么事情。
*/
import javax.net.ssl.SSLContext;
import java.util.ArrayList;
import java.util.Vector;
// 定义一个抽象被观察者接口,也称作主题
interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObserver(String name);
}
// 观察者接口
interface Observer {
public void update(String info);
}
class Wechat implements Subject {
ArrayList arrayList;
Wechat() {
arrayList = new ArrayList();
}
@Override
public void registerObserver(Observer o) {
arrayList.add(o);
}
@Override
public void removeObserver(Observer o) {
if(!arrayList.isEmpty()) {
arrayList.remove(o);
}
}
@Override
public void notifyObserver(String something) {
for (Object it : arrayList) {
((Observer) it).update(something);
}
}
public void display() {
for (Object it: arrayList) {
((User)it).display();
}
}
}
class User implements Observer {
String doing;
String name;
User(String name) {
doing = "NoThing";
this.name = name;
}
@Override
public void update(String somthing) {
doing = somthing;
}
public void display() {
System.out.println(name + " is doing " + doing);
}
}
public class Main {
public static void main(String args[]) {
User user1 = new User("Tom");
User user2 = new User("Sam");
User user3 = new User("Jack");
Wechat wechat = new Wechat();
wechat.registerObserver(user1);
wechat.registerObserver(user2);
wechat.registerObserver(user3);
wechat.display();
System.out.println("==================================");
wechat.notifyObserver("eating");
wechat.display();
System.out.println("===================================");
wechat.removeObserver(user2);
wechat.display();
}
}
设计模式——观察者模式
最新推荐文章于 2024-12-24 09:10:53 发布