您好,登錄后才能下訂單哦!
本篇文章為大家展示了Android中怎么實(shí)現(xiàn)模板方法模式,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
1.意圖
定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
熱門詞匯:骨架 步驟 結(jié)構(gòu) 延遲到子類
2.結(jié)構(gòu)
定義了幾個(gè)步驟1,2,3等,在模板方法中按照一定的結(jié)構(gòu)順序執(zhí)行這些步驟。父類的方法可以有缺省實(shí)現(xiàn),也可以是一個(gè)空實(shí)現(xiàn),即所謂的鉤子操作。
結(jié)合實(shí)際情況,我們畫出View中draw方法涉及到的幾個(gè)步驟方法如下:
學(xué)習(xí)模板方法對(duì)于我們了解框架的基類實(shí)現(xiàn),生命周期和流程控制非常有幫助,我覺得是務(wù)必要掌握的一個(gè)模式。
3.代碼
public class View{ /** * 鉤子操作,空實(shí)現(xiàn) */ protected void onDraw(Canvas canvas) { } /** *鉤子操作,空實(shí)現(xiàn) */ protected void dispatchDraw(Canvas canvas) { } //算法骨架 public void draw(Canvas canvas) { if (!verticalEdges && !horizontalEdges) { // 步驟1 if (!dirtyOpaque) onDraw(canvas); // 步驟2 dispatchDraw(canvas); // 步驟3 onDrawScrollBars(canvas); return; } } //... ... }
我們看看系統(tǒng)組件TextView的實(shí)現(xiàn):
public class TextView{ @Override protected void onDraw(Canvas canvas) { //大量自定義實(shí)現(xiàn)代碼 } }
如果我們自定義View的話,我們一般也是重寫onDraw方法即可:
public class MyView extends View { public MyView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); } }
4.效果
(1).模板方法是一種代碼復(fù)用的基本技術(shù)。它們?cè)陬悗熘杏葹橹匾?,它們提取了類庫中的公共行為?br/>(2).模板方法導(dǎo)致一種方向控制結(jié)構(gòu),"好萊塢法則":"Don't call me,i will call you.",即一個(gè)父類調(diào)用子類的操作,而不是相反。
(3).模板調(diào)用操作的類型有具體的操作,具體的AbstracClass操作,原語操作,工廠方法,鉤子操作。少定義原語操作。
(4).android中對(duì)這些重定義操作的命名喜歡在方法前加一個(gè)前綴on。
(5).模板方法使用繼承來改變算法的一部分。策略模式使用委托來改變整個(gè)算法。
上述內(nèi)容就是Android中怎么實(shí)現(xiàn)模板方法模式,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。