看看用TypeScript怎樣實(shí)現(xiàn)常見的設(shè)計(jì)模式,順便復(fù)習(xí)一下。
學(xué)模式最重要的不是記UML,而是知道什么模式可以解決什么樣的問題,在做項(xiàng)目時(shí)碰到問題可以想到用哪個(gè)模式可以解決,UML忘了可以查,思想記住就好。
這里盡量用原創(chuàng)的,實(shí)際中能碰到的例子來說明模式的特點(diǎn)和用處。
適配器模式 Adapter
特點(diǎn):把類或接口轉(zhuǎn)換成另一個(gè)接口以便系統(tǒng)調(diào)用。
用處:當(dāng)系統(tǒng)需要引入多個(gè)功能類并且這些功能的接口不統(tǒng)一時(shí)可以考慮用適配器模式把它們轉(zhuǎn)成統(tǒng)一的接口,現(xiàn)實(shí)中的例子很多,比如充電器接口適配器。
注意:分為對(duì)象適配器和類適配器。
適配器模式的目的主要在于解決接口兼容性。
下面用TypeScript簡(jiǎn)單實(shí)現(xiàn)一下適配器模式:
假定現(xiàn)在項(xiàng)目已經(jīng)在用一個(gè)畫圖接口Graph以及它的實(shí)現(xiàn)Canvas2D:
interface Graph{ drawLine(); drawPie(); }class Canvas2D implements Graph{ drawLine(){ console.log('draw 2d line'); } drawPie(){ console.log('draw 2d pie'); } }
項(xiàng)目升級(jí)需要提高UI美觀,引入3D畫圖庫(kù)Canvas3D,兩者接口不一樣:
class Canvas3D{ draw3DLine(){ console.log('draw 3d line'); } draw3DPie(){ console.log('draw 3d pie'); } }
項(xiàng)目是依賴接口Graph的,如果要直接加上3d功能就需要改接口,這個(gè)代價(jià)比較大,這時(shí)適配器派上用場(chǎng):
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26