java设计模式

2025-11-08 09:11:13

1、观察者模式又称发布订阅模式,是对象行为模式;观察者定义了一种一对多的依赖关系,让多个观察者对象同时监视着被观察者的状态,当被观察者的状态发生改变时,会通知所有的观察者,并让其自动更新自己。

java设计模式

2、observer(观察者)?想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,tom负责搜集情报,他发现的新情报不用一个一个 通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦 观察者模式:观察者模式定义了一种一队多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对 象,使他们能够自动更新自己。

java设计模式

3、观察者模式要同时存在观察者和被观察者双方,观察者可以是多个,在java中需要去继承java.util.Observable类,先看被观察者------------一个产品列表

import java.util.ArrayList;import java.util.List;import java.util.Observable;import java.util.Observer;

public class ProductList extends Observable{  private List<String> productList = null; private static ProductList instance; private ProductList(){   }

java设计模式

4、 public static ProductList getInstance(){  if(instance == null){   instance = new ProductList();   instance.productList = new ArrayList<String>();  }  return instance; } public void addProductListObservable(Observer observer){  this.addObserver(observer); } public void addProduct(String newProduct){  productList.add(newProduct);  System.out.println("产品列表新增了产品"+newProduct);  this.setChanged();//设置被观察者对象发生改变  this.notifyObservers(newProduct);//通知观察者并传递新产品   }}

java设计模式

5、public class JingDongObserver implements Observer{

 @Override public void update(Observable o, Object product) {  String newProduct = (String) product;  System.out.println("发送新产品"+newProduct+"同步到京东商城"); }

java设计模式

6、观擦者模式易于扩展,责任也更加清晰,观察者会根据被观察对象的变化二作出相应的行为;

java设计模式

7、 }public class TaoBaoObserver implements Observer{

 @Override public void update(Observable o, Object product) {  String newProduct = (String) product;  System.out.println("发送新产品"+newProduct+"同步到京东商城"); } }

java设计模式

8、public class TestObserver { public static void main(String[] args) {  ProductList observable = ProductList.getInstance();  TaoBaoObserver taoBaoObserver = new TaoBaoObserver();  JingDongObserver jingDongObserver = new JingDongObserver();  observable.addObserver(taoBaoObserver);  observable.addObserver(jingDongObserver);  observable.addProduct("新增产品1"); }}

java设计模式

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢