python設計模式面試 面試專題 JS設計模式

2021-10-19 03:44:22 字數 2785 閱讀 3412

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的 父類定義了建立物件的介面,但是由子類來具體實現,工廠方法讓...

設計模式面試題

參考 常用的設計模式彙總,超詳細!這個模式本身很簡單而且使用在業務較簡單的情況下。一般用於小專案或者具體產品很少擴充套件的情況 這樣工廠類才不用經常更改 它由三種角色組成 來用類圖來清晰的表示下的它們之間的關係 抽象工廠模式 先來認識下什麼是產品族 位於不同產品等級結構中,功能相關聯的產品組成的家族...