成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:說說你對模板方法模式的理解?應(yīng)用場景?

開發(fā) 前端
在模板模式(Template Pattern)中,一個抽象類公開定義了執(zhí)行它的方法的方式/模板,它的子類可以按需要重寫方法實現(xiàn),但調(diào)用將以抽象類中定義的方式進行。

[[434472]]

一、是什么

在模板模式(Template Pattern)中,一個抽象類公開定義了執(zhí)行它的方法的方式/模板,它的子類可以按需要重寫方法實現(xiàn),但調(diào)用將以抽象類中定義的方式進行

這種類型的設(shè)計模式屬于行為型模式

由兩部分組成:

抽象父類:封裝子類的算法框架,包括實現(xiàn)一些公用方法以及封裝在子類中所有方法的執(zhí)行順序

具體的實現(xiàn)子類:通過繼承這個抽象類,也繼承了整個算法,并且可以選擇重寫父類的方法

二、使用

例如現(xiàn)在需要泡一杯茶和咖啡,過程如下:

不管是泡茶還是咖啡,都有共同的步驟:

  • 煮沸水,相同點
  • 沸水+原料(不同點,咖啡,茶葉)
  • 將飲料倒入杯子,相同點
  • 加調(diào)料(不同點:糖與牛奶,檸檬)

可以抽象一個父類繼續(xù)泡飲料的過程,代碼如下:

  1. class Beverage { 
  2.     init() { 
  3.         this.boilWater(); 
  4.         this.brew(); 
  5.         this.pourInCup(); 
  6.         this.addCondiments(); 
  7.     } 
  8.  
  9.     boilWater() { 
  10.         console.log('煮沸水'); 
  11.     } 
  12.  
  13.     brew() { 
  14.         throw new Error( '子類必須重寫 brew 方法' ); 
  15.     } 
  16.  
  17.     pourInCup() { 
  18.         throw new Error( '子類必須重寫 pourInCup 方法' ); 
  19.     } 
  20.  
  21.     addCondiments() { 
  22.         throw new Error( '子類必須重寫 addCondiments 方法' ); 
  23.     } 

因此泡咖啡可以重寫父類的方法,如下:

  1. class Coffee { 
  2.     brew() { 
  3.         console.log( '用沸水沖泡咖啡' ); 
  4.     } 
  5.  
  6.     pourInCup() { 
  7.         console.log( '把咖啡倒進杯子' ); 
  8.     } 
  9.  
  10.     addCondiments() { 
  11.         console.log( '加糖和牛奶' ); 
  12.     } 

上述過程中,Beverage.prototype.init就是模板方法,它內(nèi)部封裝了子類的算法框架,它作為一個算法的模板,知道子類以何種順序執(zhí)行哪些方法

三、應(yīng)用場景

在構(gòu)建一系列的UI組件,這些組件的構(gòu)建過程一般如下:

  • 初始化一個 div 容器
  • 通過 ajax 請求拉取響應(yīng)的數(shù)據(jù)
  • 把數(shù)據(jù)渲染到 div 容器里面,完成組件的構(gòu)造
  • 通知用戶組件渲染完畢

于是,可以把這四個步驟都抽象到父類的模板方法里面,父類還可以順便提供第一步和第四步的具體實現(xiàn)。當子類繼承這個父類后,只需要重寫模板方法里面的 第二步和第三步即可

使用模板方法模式意味著子類放棄了對自己的控制權(quán),而是改為父類通知子類。作為子類,只負責提供一些設(shè)計上的細節(jié)

在傳統(tǒng)的編程語言中,子類的方法種類以及執(zhí)行順序都是不變的,這部分邏輯我們都抽象到了父類中,而子類的方法具體怎么實現(xiàn)是可變的,通過重寫父類的方法,將變化的邏輯部分封裝到子類中

通過增加新的子類,我們能夠給系統(tǒng)增加新的功能的,俺是并不需要修改父類以及其他的子類,這也符合開放-封閉原則

在javascript中,我們不需要依樣畫瓢去實現(xiàn)一個模板方法模式,因為高階函數(shù)是一個更好的選擇

參考文獻

https://refactoringguru.cn/design-patterns/template-method

https://zhuanlan.zhihu.com/p/129248167

 

https://juejin.cn/post/6844903615476269064

 

責任編輯:武曉燕 來源: JS每日一題
相關(guān)推薦

2021-11-09 08:51:13

模式命令面試

2021-11-05 07:47:56

代理模式對象

2021-11-10 07:47:49

組合模式場景

2021-11-03 14:10:28

工廠模式場景

2021-11-22 23:50:59

責任鏈模式場景

2021-09-16 07:52:18

算法應(yīng)用場景

2021-08-16 08:33:26

git

2021-11-04 06:58:32

策略模式面試

2021-09-06 10:51:27

TypeScriptJavaScript

2021-09-28 07:12:09

測試路徑

2021-09-29 07:24:20

場景數(shù)據(jù)

2021-09-10 06:50:03

TypeScript裝飾器應(yīng)用

2021-10-13 18:01:33

快速排序場景

2021-10-08 09:59:32

冒泡排序場景

2021-09-08 07:49:34

TypeScript 泛型場景

2021-10-09 10:25:41

排序應(yīng)用場景

2021-06-01 08:25:06

Node.jsJavaScript運行

2021-05-31 10:35:34

TCPWebSocket協(xié)議

2021-10-18 07:51:39

回溯算法面試

2021-10-11 09:38:41

開源
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 2021天天干夜夜爽 | 黄频视频 | 亚洲日本激情 | 久久久成人免费视频 | 久久丁香 | 国产最新精品视频 | 亚洲欧美中文日韩在线v日本 | 午夜寂寞影院在线观看 | 中文视频在线 | 国产精品一区二区视频 | 99亚洲精品 | 国产黄色网址在线观看 | 精品久久久久久久久久久久久久 | 黄色成人免费在线观看 | 999免费观看视频 | 国产精品福利在线观看 | 国产激情视频在线观看 | 性高朝久久久久久久3小时 av一区二区三区四区 | 日本成人片在线观看 | 一区二区三区四区免费观看 | 精品久久久久香蕉网 | 青青草av网站 | 久久久久久久国产精品影院 | 国产精品一二三区在线观看 | 黄免费观看 | 免费看一区二区三区 | 欧美亚洲综合久久 | 超碰伊人 | 成年人网站国产 | 欧美成人一区二免费视频软件 | 日韩美女爱爱 | 欧美日韩网站 | 精品国产一区二区国模嫣然 | 老牛嫩草一区二区三区av | 久久久性 | 日日夜夜精品视频 | 国产天天操 | 久久综合一区二区三区 | 精品福利在线视频 | 欧美日韩精品免费 | 天天操天天天干 |