java23中設計模式之觀察者模式
阿新 • • 發佈:2018-11-07
什麼叫觀察者模式?
當被觀察者的資料更新時,將會通知觀察該主題的所有觀察者。就像---微信公眾號就是被觀察者---關注該公眾號的就是觀察者---》
當公眾號更新文章時,關注的人就會獲得該資訊。這就是觀察者模式的應用。
用圖說明:
下面將用程式碼來解釋上面的內容:
1.觀察者
package com.observer.inter;
/**
* 觀察者
* 1.提供更新方法
* @author zy
*
*/
public interface Observer {
void update(String msg);
}
2.被觀察者
package com.observer.concretesubject; /** * 觀察者模式中:被觀察者是抽象類,當然介面也可以,但是正宮就是抽象類 * 被觀察者 * 1.定義註冊觀察者方法 * 2.定義移除觀察者方法 * 3.通知觀察者方法 * 4.傳送通知(抽象) * @author zy * */ import java.util.ArrayList; import java.util.List; import com.observer.inter.Observer; public abstract class ConcreteSubject { //定義一個集合用來作為觀察者者的容器 List<Observer> list=new ArrayList<>(); // 1.定義註冊觀察者方法 public void registerObserver(Observer ob){ list.add(ob); } // 2.定義移除觀察者方法 public void removeObserver(Observer ob){ list.remove(ob); } // 3.通知觀察者方法 protected void notifyObserver(String msg){ for (Observer ob : list) { ob.update(msg); } } // 4.傳送通知(抽象) public abstract void setInfo(String msg); }
3.觀察者實現類
package com.observer.inter;
/**
* 觀察者實現類
* @author zy
*
*/
public class Users implements Observer{
private String name;
public Users(String name) {
this.name=name;
}
@Override
public void update(String msg) {
System.out.println(this.name+":接收到一條資訊----》"+msg);
}
}
4.被觀察者實現類
package com.observer.test;
import com.observer.concretesubject.ConcreteSubject;
/**
* 仿微信公眾號推送訊息,被觀察者
* @author zy
*
*/
public class WeChatServer extends ConcreteSubject{
//實現訊息推送
@Override
public void setInfo(String msg) {
System.out.println("推送資訊中。。。。。。");
notifyObserver(msg);
}
}
5.測試類
package com.observer.test;
import com.observer.inter.Users;
public class Test {
public static void main(String[] args) {
//被觀察者
WeChatServer weChatServer=new WeChatServer();
//定義觀察者
Users u1=new Users("張三");
Users u2=new Users("胡月");
Users u3=new Users("Bob");
//註冊觀察者--關注公眾號
weChatServer.registerObserver(u1);
weChatServer.registerObserver(u2);
weChatServer.registerObserver(u3);
//通知觀察者
weChatServer.setInfo("好好學習");
//移除觀察者--取消關注
weChatServer.removeObserver(u3);
weChatServer.setInfo("天天向上");
}
}
執行結果:
推送資訊中。。。。。。
張三:接收到一條資訊----》好好學習
胡月:接收到一條資訊----》好好學習
Bob:接收到一條資訊----》好好學習
推送資訊中。。。。。。
張三:接收到一條資訊----》天天向上
胡月:接收到一條資訊----》天天向上