首页 > 代码库 > 【设计模式】—— 观察者模式Observer
【设计模式】—— 观察者模式Observer
前言:【模式总览】——————————by xingoo
模式意图
观察者模式,也叫发布/订阅模式,从名字来说就能察觉到它的过程应该是,发布——其他人接受。
这个模式定义了对象之间的一种依赖关系,当一个对象发生变化时,其他的对象收到更新,也发生变化。
模拟我们订阅邮件这个场景,不管我们的邮箱是在登陆还是关闭,邮件都会发送到邮箱里面。只要把自己的邮箱订阅到这个邮件就可以了!这个模式也是这样一个过程。
这个模式代码相对来说比较容易理解,而且应用很广泛。
应用场景
1 当一个模型有几个展现方面,通过修改一个展现,顺便更新其他的。就好比一个网站的有web端,也有移动端,当web端的数据发生变化时,移动端的数据展现也要更新。
2 对一个对象发生改变,而不知道将有多少对象会发生改变时,利用这种模式可以有效的管理对象。
模式结构
Subject 抽象的主题角色
interface Subject{ public void attach(Observer observer); public void detach(Observer observer); void notifyObservers();}
ConcreteSubject 具体的主题角色,内部有一个容易,用于存放订阅者
class ConcreteSubject implements Subject{ List<Observer> list = new ArrayList(); public void attach(Observer observer) { list.add(observer); } public void detach(Observer observer) { list.remove(observer); } public void notifyObservers() { for(Observer o : list){ o.update(); } }}
Observer 抽象的订阅者角色
interface Observer{ public void update();}
ConcreteObserver 具体的订阅者
class ConcreteObserver1 implements Observer{ public void update() { System.out.println("ConcreteObserver1 update"); }}class ConcreteObserver2 implements Observer{ public void update() { System.out.println("ConcreteObserver2 update"); }}class ConcreteObserver3 implements Observer{ public void update() { System.out.println("ConcreteObserver3 update"); }}
全部代码
1 package com.xingoo.test.design.observer; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 interface Subject{ 7 public void attach(Observer observer); 8 public void detach(Observer observer); 9 void notifyObservers();10 }11 class ConcreteSubject implements Subject{12 List<Observer> list = new ArrayList();13 public void attach(Observer observer) {14 list.add(observer);15 }16 public void detach(Observer observer) {17 list.remove(observer);18 }19 public void notifyObservers() {20 for(Observer o : list){21 o.update();22 }23 }24 }25 interface Observer{26 public void update();27 }28 class ConcreteObserver1 implements Observer{29 public void update() {30 System.out.println("ConcreteObserver1 update");31 }32 }33 class ConcreteObserver2 implements Observer{34 public void update() {35 System.out.println("ConcreteObserver2 update");36 }37 }38 class ConcreteObserver3 implements Observer{39 public void update() {40 System.out.println("ConcreteObserver3 update");41 }42 }43 public class Client {44 public static void main(String[] args) {45 Subject subject = new ConcreteSubject();46 Observer o1 = new ConcreteObserver1();47 Observer o2 = new ConcreteObserver2();48 Observer o3 = new ConcreteObserver3();49 subject.attach(o1);50 subject.attach(o2);51 subject.attach(o3);52 subject.notifyObservers();53 54 subject.detach(o2);55 subject.notifyObservers();56 }57 }
运行结果
ConcreteObserver1 updateConcreteObserver2 updateConcreteObserver3 update
ConcreteObserver1 updateConcreteObserver3 update
【设计模式】—— 观察者模式Observer
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。