观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,==一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知==。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
季度分享差不多落幕,大家满心期待大波的审批结果,没人心里无时无刻不想去大波那里问一下结果如何,但是这样大波心里叫苦,每时每刻都有人来骚扰,不胜其烦,所以,观察者模式出场
package com.jack.idea.test.designmode;import java.util.ArrayList;import java.util.List;/** * 观察者模式 * * @author ljs.song * @date 2018-01-02 10:40 */public class ObserverClient { public static void main(String[] args) { //大boss大波出场 DaboSubject daboSubject = new DaboSubject(); //小杰向大boss表明想第一时间知道结果 XiaoJieObserver xiaoJieObserver = new XiaoJieObserver(); daboSubject.registerObserver(xiaoJieObserver); //小臣也想知道结果 XiaoChenObserver xiaoChenObserver = new XiaoChenObserver(); daboSubject.registerObserver(xiaoChenObserver); //小龙表示我也想知道 XiaoLongObserver xiaoLongObserver = new XiaoLongObserver(); daboSubject.registerObserver(xiaoLongObserver); //大波进行一次初步评审变动 daboSubject.notifyAllObserver("大家好我初步做了评审,请查看是否有疑问"); System.out.println("--------------------------"); //小龙觉得有疑问,告诉了大波,大波重新修改了小龙的评审结果 daboSubject.notifyObserver(2,"我给你改了,再看下有没有问题"); }}/** * 被观察者,主题 */abstract class Subject{ protected List<Observer> observers = new ArrayList<>(); void registerObserver(Observer observer){ if(observer != null && !observers.contains(observer)){ observers.add(observer); } } void removeObserver(Observer observer){ if(observer != null && observers.contains(observer)){ observers.remove(observer); } } /** * 通知全部观察者 */ abstract void notifyAllObserver(String messages); /** * 通知指定观察者 * @param i * @param message */ abstract void notifyObserver(int i,String message);}/** * 观察者 */interface Observer{ void update(String message);}/** * 大波,真正的被观察者 */class DaboSubject extends Subject { /** * 状态变化后通知各个观察者 */ @Override public void notifyAllObserver(String message) { for (Observer observer1 : this.observers) { observer1.update(message); } } @Override void notifyObserver(int i,String message) { observers.get(i).update(message); }}/** * 小杰接受被观察者的信息 */class XiaoJieObserver implements Observer{ @Override public void update(String message) { System.out.println("小杰收到通知:" + message); }}/** * 小臣等待被观察者的信息 */class XiaoChenObserver implements Observer{ @Override public void update(String message) { System.out.println("小辰收到通知:" + message); }}/** * 小龙等待信息公布 */class XiaoLongObserver implements Observer{ @Override public void update(String message) { System.out.println("小龙收到通知:" + message); }}
package com.jack.idea.test.designmode;
import java.util.ArrayList;
import java.util.List;
/**
* 观察者模式
*
* @author ljs.song
* @date 2018-01-02 10:40
*/
public class ObserverClient {
public static void main(String[] args) {
//大boss大波出场
DaboSubject daboSubject = new DaboSubject();
//小杰向大boss表明想第一时间知道结果
XiaoJieObserver xiaoJieObserver = new XiaoJieObserver();
daboSubject.registerObserver(xiaoJieObserver);
//小臣也想知道结果
XiaoChenObserver xiaoChenObserver = new XiaoChenObserver();
daboSubject.registerObserver(xiaoChenObserver);
//小龙表示我也想知道
XiaoLongObserver xiaoLongObserver = new XiaoLongObserver();
daboSubject.registerObserver(xiaoLongObserver);
//大波进行一次初步评审变动
daboSubject.notifyAllObserver("大家好我初步做了评审,请查看是否有疑问");
System.out.println("--------------------------");
//小龙觉得有疑问,告诉了大波,大波重新修改了小龙的评审结果
daboSubject.notifyObserver(2,"我给你改了,再看下有没有问题");
}
* 被观察者,主题
abstract class Subject{
protected List<Observer> observers = new ArrayList<>();
void registerObserver(Observer observer){
if(observer != null && !observers.contains(observer)){
observers.add(observer);
void removeObserver(Observer observer){
if(observer != null && observers.contains(observer)){
observers.remove(observer);
* 通知全部观察者
abstract void notifyAllObserver(String messages);
* 通知指定观察者
* @param i
* @param message
abstract void notifyObserver(int i,String message);
* 观察者
interface Observer{
void update(String message);
* 大波,真正的被观察者
class DaboSubject extends Subject {
* 状态变化后通知各个观察者
@Override
public void notifyAllObserver(String message) {
for (Observer observer1 : this.observers) {
observer1.update(message);
void notifyObserver(int i,String message) {
observers.get(i).update(message);
* 小杰接受被观察者的信息
class XiaoJieObserver implements Observer{
public void update(String message) {
System.out.println("小杰收到通知:" + message);
* 小臣等待被观察者的信息
class XiaoChenObserver implements Observer{
System.out.println("小辰收到通知:" + message);
* 小龙等待信息公布
class XiaoLongObserver implements Observer{
System.out.println("小龙收到通知:" + message);
转载请注明出处 阿布的夏天
原文链接:http://www.cnblogs.com/jackslj/p/11531797.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728