直播平臺開發中,策略模式和釋出訂閱模式的使用
什麼是設計模式
怎麼用
策略模式
const generateStatus = (text: string) => { switch(text) { case 'STATUS_OK': return { styles: globalStyle.suc, text: '執行' }; case 'STATUS_UNKNOWN': return { styles: globalStyle.info, text: '未知狀態' }; case 'STATUS_FAIL': return { styles: globalStyle.fail, text: '故障', }; case 'STATUS_STOPPED': return { styles: globalStyle.stop, text: '停止' }; default: return { styles: '', text }; }};render: (status: string) => { const { styles, text } = generateStatus(status); return ( <span className={styles}>{text}</span> );}
// 1.建立一個物件const statusData = { 'STATUS_OK': { styles: globalStyle.suc, text: '執行' }, 'STATUS_UNKNOWN': { styles: globalStyle.info, text: '未知狀態' }, 'STATUS_FAIL': { styles: globalStyle.fail, text: '故障' }, 'STATUS_STOPPED': { styles: globalStyle.stop, text: '停止', },};render: (status: string) => { return ( <span className={statusData[status]?.styles ?? ''}>{statusData[status]?.text ?? text}</span> );}
type IType = 'uproxy' | 'ushard';type ICode = 'STATUS_OK' | 'STATUS_UNKNOWN' | 'STATUS_FAIL' | 'STATUS_STOPPED'render: (status: { type: IType, code: ICode,}) => { //....比如這種情況;};// 這種情況下也可以用map來實現 (map和object的區別是map可以 value: value);const statusData = new Map([ [{type: 'uproxy', code: 'STATUS_OK'}, {styles: globalStyle.suc, text: 'uproxy執行'}]; [{type: 'ushard', code: 'STATUS_OK'}, {styles: globalStyle.suc, text: 'ushard執行'}];])render: (status) => { const statusData = [...statusData].find(([key,value]) => key.type === status.type && key.code === status.code ); return ( <span className={statusData[1].styles}>{statusData[1].text}</span> );}
釋出訂閱模式
class EventEmitter { constructor() { this.events = {}; //事件儲存中心; this.addListener.bind(this); this.removeListener.bind(this); this.emit.bind(this); } protected events: {[key: string]: any}; public addListener(event: string, listener: (...args: any[]) => void) { // 由於一個事件可能註冊多個回撥函式,所以使用陣列來儲存事件佇列 (this.events[event] || (this.events[event] = [])).push(listener); } public removeListener(event: string, listener: (...args: any[]) => void) { if (this.events[event]) { this.events[event].splice(this.events[event].indexOf(listener), 1); } } //釋出事件。 args 用於收集釋出事件時傳遞的引數 public emit(event: string, ...args: any[]) { if (this.events[event]) { this.events[event].forEach((listener: any) => { listener(...args); }); } }}const eventEmitter = new EventEmitter();export default eventEmitter;
//1.設定監聽React.useEffect(() => { eventEmitter.addListener('storageEvent', handleStorageChange); return () => { eventEmitter.removeListener('storageEvent', handleStorageChange); };}, []);//2.封裝一個自定義的localStorage的setItem的方法;//每次在localStorage中寫入/修改資料的時候都會呼叫emit函式釋出事件,並把key,value給傳遞過去;const setItem = (key, value) { eventEmitter.emit('storageEvent', {key, value}); return localStorage.setItem(key, value);}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2848145/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 直播app開發,實現簡單的釋出訂閱者模式APP模式
- 設計模式之釋出訂閱模式(2) Redis 釋出/訂閱模式設計模式Redis
- 釋出-訂閱模式模式
- 釋出訂閱模式模式
- 觀察者模式和釋出訂閱模式(上)模式
- JavaScript中釋出/訂閱模式的理解JavaScript模式
- Spring 中的釋出-訂閱模式Spring模式
- javascript中的設計模式之釋出-訂閱模式JavaScript設計模式
- 觀察者模式-訂閱釋出模式模式
- 談談觀察者模式和釋出訂閱模式模式
- javascript(js) 觀察者模式和釋出訂閱模式JavaScriptJS模式
- 設計模式之釋出訂閱模式(1) 一文搞懂釋出訂閱模式設計模式
- JS訂閱釋出模式JS模式
- ActiveMQ釋出訂閱模式MQ模式
- js 觀察者模式 訂閱釋出模式JS模式
- js設計模式--釋出訂閱模式JS設計模式
- 觀察者模式 vs 釋出訂閱模式模式
- 觀察者模式 vs 釋出-訂閱模式模式
- 觀察者模式(又叫釋出-訂閱模式)模式
- Javascript(七)釋出-訂閱模式JavaScript模式
- 釋出訂閱模式學習模式
- 釋出訂閱模式---模擬Node中的EventEmitter模式MIT
- JavaScript設計模式系列--釋出訂閱模式JavaScript設計模式
- JS設計模式七:釋出-訂閱模式JS設計模式
- Javascript設計模式之釋出-訂閱模式JavaScript設計模式
- 設計模式學習之觀察者模式和釋出訂閱模式設計模式
- 對釋出-訂閱者模式的解析模式
- 釋出訂閱 VS 觀察者模式模式
- MQTT 釋出/訂閱模式介紹MQQT模式
- 行為型:釋出訂閱模式模式
- JavaScript 觀察者 (釋出/訂閱) 模式JavaScript模式
- 學習javascript中釋出-訂閱設計模式JavaScript設計模式
- js進階-設計模式: 釋出訂閱模式JS設計模式
- C#設計模式之訂閱釋出模式C#設計模式
- javascript設計模式 之 5 釋出-訂閱模式JavaScript設計模式
- JavaScript設計模式 觀察者模式(釋出訂閱)JavaScript設計模式
- C#設計模式(一)訂閱-釋出模式C#設計模式
- 淺談觀察者模式和釋出訂閱者模式的微妙區別模式