首頁 > 其他

java設計模式

2019-12-10 14:37:39

觀察者模式又稱發布訂閱模式,是物件行為模式

1

觀察者模式又稱發布訂閱模式,是物件行為模式;觀察者定義了一種一對多的依賴關係,讓多個觀察者物件同時監視著被觀察者的狀態,當被觀察者的狀態發生改變時,會通知所有的觀察者,並讓其自動更新自己。


2

observer(觀察者)?想知道咱們公司最新MM情報嗎?加入公司的MM情報郵件組就行了,tom負責蒐集情報,他發現的新情報不用一個一個 通知我們,直接發布給郵件組,我們作為訂閱者(觀察者)就可以及時收到情報啦 觀察者模式:觀察者模式定義了一種一隊多的依賴關係,讓多個觀察者物件同時監聽某一個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者對 象,使他們能夠自動更新自己。


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(){   }


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);//通知觀察者並傳遞新產品   }}


5

public class JingDongObserver implements Observer{

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


6

觀擦者模式易於擴充套件,責任也更加清晰,觀察者會根據被觀察物件的變化二作出相應的行為;


7

 }public class TaoBaoObserver implements Observer{

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


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"); }}



IT145.com E-mail:sddin#qq.com