js設計模式
發布訂閱模式:
這種設計模式可以大大降低程式模組之間的耦合度,便於更加靈活的擴充套件和維護。
class player
// 模擬2秒後發布乙個'play'事件
settimeout(() => , 2000)
// 模擬4秒後發布乙個'pause'事件
settimeout(() => , 4000)
// 發布事件
_publish(event, data) else if (event) else
const player = new player()
console.log(player)
const onplayerplay1 = function(data)
// 發布廣播
broadcast(passenger, message = passenger) else 下車`)
// 開車
start() )
// 停車
end() )
// 乘客
class passenger 收到訊息`, message)
// 乘客發現停車了,於是自己下車
if (object.is(message.type, 2)) ,我現在要下車`, bus)
bus.debus(this)
// 建立一輛汽車
const bus = new bus()
// 建立兩個乘客
const passenger1 = new passenger(1)
const passenger2 = new passenger(2)
// 倆乘客分別上車
bus.aboard(passenger1)
bus.aboard(passenger2)
// 2秒後開車
settimeout(bus.start.bind(bus), 2000)
// 3秒時司機發現2號乘客沒買票,2號乘客被驅逐下車
settimeout(() => )
bus.debus(passenger2)
}, 3000)
// 4秒後到站停車
settimeout(bus.end.bind(bus), 3600)
// 6秒後再開車,車上已經沒乘客了
settimeout(bus.start.bind(bus), 6666)
**模式 proxy pattern:
為其他物件提供一種**以控制對這個物件的訪問。
**模式使得**物件控制具體物件的引用。**幾乎可以是任何物件:檔案,資源,記憶體中的物件,或者是一些難以複製的東西。
es6中的proxy物件
const target = {}
const handler = else )
p.a = 3 // 被**到**的操作
console.log(p.c) //
單例模式 singleton pattern:
保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點(呼叫乙個類,任何時候返回的都是同乙個例項)。
// 類數例項:
class singleton else ;
//設定name引數
this.name = 'singletontester';
//例項容器
var instance;
return );
console.log(singletontest.pointx); // 輸出 5
// 建構函式的屬性
function universe()
text()
image()
// 建立工廠
const linkfactory = new domfactory('link')
const textfactory = new domfactory('text')
linkfactory.url = ''
linkfactory.insert(document.body)
textfactory.text = 'hi! i am surmon.'
textfactory.insert(document.body)
裝飾者模式 decorative pattern:
裝飾者(decorator)模式能夠在不改變物件自身的基礎上,在程式執行期間給對像動態的新增職責(方法或屬性)。與繼承相比,裝飾者是一種更輕便靈活的做法。
簡單說:可以動態的給某個物件新增額外的職責,而不會影響從這個類中派生的其它物件。
es7裝飾器
function isanimal(target) {
target.isanimal = true
return target
// 裝飾器
@isanimal
class cat {
console.log(cat.isanimal) // true
作用於類屬性的裝飾器:
function readonly(target, name, descriptor) {
discriptor.writable = false
return discriptor
class cat {
@readonly
say() {
console.log("meow ~")
var kitty = new cat()
kitty.say = function() {
console.log("woof !")
kitty.say() // meow ~
面試準備 設計模式
乙個類只有乙個例項物件,將類的建構函式 拷貝建構函式 賦值操作符函式設為私有,並且通過介面獲取唯一例項。為什麼要用static,因為這乙個例項物件要起到全域性的作用,static將物件存在全域性變數區,生命週期伴隨整個程式。在類載入的時候不初始化,等到需要的時候,才建立物件,這是一種時間換空間的方式...
面試集錦(十三)設計模式
在spring中,bean可以被定義為兩種模式 prototype 多例 和singleton 單例 只有乙個共享的例項存在,所有對這個bean的請求都會返回這個唯一的例項。每次請求都會新建乙個bean例項,相當於new 通過配置bean的 父類定義了建立物件的介面,但是由子類來具體實現,工廠方法讓...
設計模式面試題
參考 常用的設計模式彙總,超詳細!這個模式本身很簡單而且使用在業務較簡單的情況下。一般用於小專案或者具體產品很少擴充套件的情況 這樣工廠類才不用經常更改 它由三種角色組成 來用類圖來清晰的表示下的它們之間的關係 抽象工廠模式 先來認識下什麼是產品族 位於不同產品等級結構中,功能相關聯的產品組成的家族...