看看用TypeScript怎樣實(shí)現(xiàn)常見的設(shè)計(jì)模式,順便復(fù)習(xí)一下。
學(xué)模式最重要的不是記UML,而是知道什么模式可以解決什么樣的問題,在做項(xiàng)目時(shí)碰到問題可以想到用哪個(gè)模式可以解決,UML忘了可以查,思想記住就好。
這里盡量用原創(chuàng)的,實(shí)際中能碰到的例子來說明模式的特點(diǎn)和用處。
組合模式 Composite
特點(diǎn):以樹的形式展示對象的組合,并且可以以類似的方式處理每個(gè)枝點(diǎn)。
用處:當(dāng)對象組合以樹狀存在,有父有子,并且對象的行為差不多時(shí)可以考慮組合模式,如菜單,游戲里的技能樹。
注意:遍歷組合的性能要求。
下面用TypeScript簡單實(shí)現(xiàn)一下組合模式:
技能樹麻煩了點(diǎn),技能激活要引入觀察者模式,就以菜單為例吧。
菜單可以包括子菜單,點(diǎn)擊菜單項(xiàng)時(shí)有子菜單則顯示子菜單,沒有時(shí)觸發(fā)點(diǎn)擊事件。
先聲明一個(gè)抽象,包含菜單的名字,點(diǎn)擊事件和添加Child,一般情況下Menu會維護(hù)一個(gè)childs集合,通過這個(gè)集合來添加子菜單,不過這里沒有用這種方式,采用的是繼承一個(gè)集合來讓本身擁有集合的能力,這樣更方便,是父還是子可以通過字段來控制,也可以通過是否有child來表示。
abstract class MenuBase extends Array<M