在前端開發中,JavaScript是一個非常重要的語言,它可以為網站添加很多動態效果和交互特性。其中,在開發過程中最常用的設計模式之一就是監聽者模式,它可以幫助我們實現松耦合和更好的拓展性。
監聽者模式又稱為發布訂閱模式,它基于異步事件和回調機制,其中一個對象(被觀察者)維護一個存儲著所有關注它的其他對象(觀察者)的引用列表。 當狀態改變時,被觀察者對象會通知觀察者并調用其定義好的回調函數。下面,我們通過一個簡單的購物車功能來說明監聽者模式的實現。
class ShoppingCart { constructor() { this.productsList = []; } addProduct(product) { this.productsList.push(product); this.notifyAllObservers(); } notifyAllObservers() { this.observers.forEach(observer =>{ observer.update(this); }); } addObserver(observer) { this.observers.push(observer); } } class Product { constructor(name, price) { this.name = name; this.price = price; } } class User { update(shoppingCart) { console.log(`User notified with products ${JSON.stringify(shoppingCart.productsList)}`); } } const cart = new ShoppingCart(); const toothBrush = new Product('Tooth Brush', 2); const towel = new Product('Towel', 5); cart.addObserver(new User()); cart.addProduct(toothBrush); cart.addProduct(towel);
在上面的代碼中,我們定義了一個購物車類(ShoppingCart)和產品類(Product),然后定義了一個觀察者(User),其update方法會在購物車有新產品加入時自動被調用。我們可以通過向購物車添加不同的產品來觸發update方法,從而檢查購物車中的所有產品。
通過使用監聽者模式,我們可以很容易地添加或移除觀察者對象,而不需要修改被觀察者對象的代碼。例如,我們可以定義一個管理員類(Admin)來監視購物車的行為:
class Admin { update(shoppingCart) { console.log(`Admin notified with products ${JSON.stringify(shoppingCart.productsList)}`); } } cart.addObserver(new Admin());
現在我們可以在控制臺上看到管理員和用戶都已收到最新的購物車更新通知。這就是監聽者模式的重要性,它可以幫助我們在對象間實現松耦合,為我們的程序提供更好的拓展性和可維護性。
上一篇css圖片懸浮動畫