觀察者模式——在對象之間定義一對多的依賴,這樣一來,當一個對象改變狀態,依賴它的對象都會收到通知,並自動更新
package pattern;
import java.util.ArrayList;
import java.util.List;
// 測試
public class Observer {
public static void main(String[] args) {
Weixin wTest = new Weixin();
UserA aa = new UserA();
UserB bb = new UserB();
UserC cc = new UserC();
wTest.register(aa);
wTest.register(bb);
wTest.setContent("1");
System.out.println("-----------");
wTest.remove(aa);
wTest.setContent("1");
System.out.println("-----------");
wTest.register(cc);
wTest.setContent("1");
}
}
// 步驟 1
// 創建 Subject 類。
// Subject.java
class Weixin{
private List<User> observes = new ArrayList<>();
private String content;
public void setContent(String content){
this.content = content;
notifyAllObserves();
}
private void notifyAllObserves() {
for (User t : observes){
t.update();
}
}
public String getContent(){
return content;
}
public void register(User user){
observes.add(user);
}
public void remove(User user){
int n = observes.indexOf(user);
for (int i=0; i<=n; i++){
observes.remove(i);
}
}
}
// 步驟 2
// 創建 Observer 類。
// Observer.java
// 我覺得用接口比較好, 而且書上是用接口的
interface User{
void update();
}
// 步驟 3
// 創建實體觀察者類。
// BinaryObserver.java
class UserA implements User{
public void update() {
System.out.println("AAA");
}
}
class UserB implements User{
public void update() {
System.out.println("BBB");
}
}
class UserC implements User{
public void update() {
System.out.println("CCC");
}
}