設計模式–03.觀察者模式

  • 2020 年 2 月 17 日
  • 筆記

觀察者模式

觀察者模式是一個消息的派發的模式,是把被觀察者的狀態能夠及時的通知給觀察者。

比如一個超市的打折了,需要把消息通知給每一個超市的顧客,這樣就可以把超市作為一個被觀察者,而顧客是觀察者。

實現邏輯

觀察者模式實現的類圖如下:

實現步驟:

  1. 定義一個Observer接口,約束觀察者(顧客)需要實現的方法:
   public interface Observer {       void reciveMessage(double price);   }     public class CusmtomerObserver1 implements Observer {       @Override       public void reciveMessage(double price) {             System.out.println("CusmtomerObserver1 收到了價格消息:" + price);       }   }     public class CusmtomerObserver2 implements Observer {       @Override       public void reciveMessage(double price) {             System.out.println("CusmtomerObserver2 收到了價格消息:" + price);       }   }  
  1. 實現被觀察對象的方法
 public class MarketSubject {       private double price;       public double getPrice() {           return price;       }         public void setPrice(double price) {           this.price = price;           notifyObserver(price);       }         private ArrayList<Observer> observerList=new ArrayList<>();       public void addObserver(Observer observer){           observerList.add(observer);       }         public void removeObserver(Observer observer){           observerList.remove(observer);       }         public void notifyObserver(double price){           for (Observer ob : observerList) {               ob.reciveMessage(price);           }       }   }     
  1. 實現方法的註冊和通知
 public class ObserverMain {       public static void main(String[] args) {           MarketSubject marketSubject=new MarketSubject();           marketSubject.addObserver(new CusmtomerObserver1());           marketSubject.addObserver(new CusmtomerObserver2());           marketSubject.setPrice(100d);         }   }

運行結果:

CusmtomerObserver1 收到了價格消息:100.0  CusmtomerObserver2 收到了價格消息:100.0

(本文完)

作者:付威 博客地址:http://blog.laofu.online 如有任何知識產權、版權問題或理論錯誤,還請指正。 本文是付威的網絡博客原創,自由轉載-非商用-非衍生-保持署名,請遵循:創意共享3.0許可證