1. 單例模式
保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點(呼叫乙個類,任何時候返回的都是同乙個例項)。
2. 工廠模式class singleton
getname()
static getinstance(name)
return this.instance
}}const instancea = singleton.getinstance('seven1')
const instanceb = singleton.getinstance('seven2')
工廠模式定義乙個用於建立物件的介面,這個介面由子類決定例項化哪乙個類。該模式使乙個類的例項化延遲到了子類。而子類可以重寫介面方法以便建立的時候指定自己的物件型別。
3.發布/訂閱者模式class car
getname ()
setname(name)
}class bus
getname ()
setname(name)
use ()
}class factory
static getinstance(name)
}getname ()
setname(name)
}var car = factory.getinstance('car')
var bus = factory.getinstance('bus')
console.log(car)
console.log(bus)
發布訂閱模式,基於乙個主題/事件通道,希望接收通知的物件(稱為subscriber)通過自定義事件訂閱主題,被啟用事件的物件(稱為publisher)通過發布主題事件的方式被通知。
js中的事件監聽機制就是一種觀察者模式。
4.觀察者模式class publish
}// 訂閱事件
on(eventtype, handler)
this.handlers[eventtype].push(handler)
}// 觸發事件(發布事件)
emit(eventtype)
}// 刪除訂閱事件
off(eventtype, handler) }}
}}var publisher = new publish();
//訂閱事件a
publisher.on('a', function(data));
publisher.on('b', function(data));
//觸發事件a
publisher.emit('a', '我是a呼叫的引數1');
publisher.emit('a', '我是a呼叫的引數2');
//觸發事件b
publisher.emit('b', '我是b呼叫的引數1');
publisher.emit('b', '我是b呼叫的引數2');
//console 控制台
//1我是a呼叫的引數1
//1我是a呼叫的引數2
//2我是b呼叫的引數1
//2我是b呼叫的引數2
觀察者和發布/訂閱者區別//首先是目標的建構函式,他有個陣列,用於新增觀察者。還有個廣播方法,遍歷觀察者陣列後呼叫他們的update方法:
class subject
addsub(sub)
notify() );
}}//觀察者有個update方法:
class observer
}//測試**
let subject = new subject();
let ob = new observer();
//目標新增觀察者了
subject.addsub(ob);
//目標發布訊息呼叫觀察者的更新方法了
subject.notify(); //update
1.觀察者模式是一種緊耦合的狀態;而發布/訂閱模式是一種松耦合的狀態;
2.觀察者模式是通過主題自己本身去遍歷觀察者,然後呼叫訂閱者的通知方法去實現的;
而發布/訂閱模式是通過事件管道去通知的
JS設計模式
什麼是模式?什麼是設計模式?設計模式是解決軟體設計常見問題的可復用方案 什麼是反模式?反模式是一種針對某個特定問題的不良解決方案,該方案會導致槽糕的情況發生 單例模式?皇帝單例模式 var kingsingleton function return 皇帝存在返回皇帝 return instance ...
js 設計模式
廣義上,模式是乙個可以用來產生其他事物的模板或者模型。在軟體開發過程中,模式是指乙個通用問題的解決方案,用抽象化表示和解決一類問題的模板。學習設計模式,有助於寫出可復用和可維護性高的程式 設計模式的原則是 找出 程式中變化的地方,並將變化封裝起來 1.工廠模式 即,函式裡面返回單個物件。缺點就是建立...
js 設計模式
設計模式就是一套被反覆使用的 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了重用 讓 更容易被他人理解 保證 可靠性。其實就是前人總結的,針對特定型別問題的設計方案。總體來說設計模式分為三大類 建立型模式 共五種 工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式。結構型模...