教學原始碼:
學習原始碼:
內容介紹
什麼是模版方法模式
如何實現模版方法模式
模版方法模式的特點
模版方法模式在專案中的應用
模板方法模式
定義了乙個操作演算法框架,而將一些步驟延遲到子類中實現,
使得子類在不改變乙個演算法結構的同時就重新定義該演算法的某些特定步驟。
案例介紹:飲料機配置模版
1.把水煮沸(boilwater)
2.*泡飲料(brew)*
3.把飲料倒進杯子(pourincup)
4.*加調味料(addcondiments)*
**編寫
1.編寫refreshbeverage類
package com.myimooc.designpattern.c8template;
/** * @title 模版模式
* @describe 抽象基類,為所有子類提供乙個演算法框架。提神飲料
* @author zc
* @version 1.0 2017-09-02
*/public abstract class refreshbeverage
/*** 基本方法,將水煮沸
*/private void boilwater()
/*** 基本方法,將飲料倒入杯中
*/private void pourincup()
/*** 抽象的基本方法,泡製飲料
*/protected abstract void addcondiments();
/*** 抽象的基本方法,加入調味料
*/protected abstract void brew();
}
**編寫
1.編寫coffee類
package com.myimooc.designpattern.c8template;
/** * @title 模版模式
* @describe 具體子類,提供了咖啡之中的具體實現
* @author zc
* @version 1.0 2017-09-02
*/public class coffee extends refreshbeverage
@override
protected void brew()
}
2.編寫tea類
package com.myimooc.designpattern.c8template;
/** * @title 模版模式
* @describe 具體子類,提供了製備茶的具體實現
* @author zc
* @version 1.0 2017-09-02
*/public class tea extends refreshbeverage
@override
protected void brew()
}
3.編寫refreshbeveragetest類
package com.myimooc.designpattern.c8template;
/** * @title 模版模式
* @describe 測試類
* @author zc
* @version 1.0 2017-09-02
*/public class refreshbeveragetest
}
業務場景
目前的提神飲料的步驟是固定的,當有些人不需要加入調味料時,使用鉤子方法進行個性化擴充套件。
**編寫
1.修改refreshbeverage類
package com.myimooc.designpattern.c8template;
/** * @title 模版模式
* @describe 抽象基類,為所有子類提供乙個演算法框架。提神飲料
* @author zc
* @version 1.0 2017-09-02
*/public abstract class refreshbeverage
}/**
* hook 方法(鉤子函式),提供乙個預設或空的實現
* 具體的子類可以自行決定是否掛鉤以及如何掛鉤
* 詢問使用者是否加入調料
*/protected boolean iscustomerwantscondiments()
/*** 基本方法,將水煮沸
*/private void boilwater()
/*** 基本方法,將飲料倒入杯中
*/private void pourincup()
/*** 抽象的基本方法,泡製飲料
*/protected abstract void addcondiments();
/*** 抽象的基本方法,加入調味料
*/protected abstract void brew();
}
2.修改tea類
package com.myimooc.designpattern.c8template;
/** * @title 模版模式
* @describe 具體子類,提供了製備茶的具體實現
* @author zc
* @version 1.0 2017-09-02
*/public class tea extends refreshbeverage
@override
protected void brew()
/*** 子類通過覆蓋的形式選擇掛載鉤子函式
*/@override
protected boolean iscustomerwantscondiments()
}
模版方法模式的實現要素分析
抽象基類
1.基本方法:對各種具體子類而言是相同,具有共性的步驟
2.抽象方法:只知道具體原則,而不知道實現細節,需要延遲到子類實現的步驟
3.鉤子方法:在基類中提供乙個預設或空的實現,子類可以掛載及覆蓋實現
4.模版方法:template方法(final),將基本方法、抽象方法、鉤子方法按照業務邏輯的需求,
彙總而成乙個模版方法。一定要宣告為final,以防止被子類覆寫。
具體子類
1.實現基類中的抽象方法:以提供個性化的、具體的、獨特的實現
2.覆蓋鉤子方法:更加個性化的影響模版方法區域性的行為
模版方法模式的實現要素
準備乙個抽象類,將部分邏輯以具體方法的形式實現,
然後宣告一些抽象方法交由子類實現剩餘邏輯,
用鉤子方法給予子類更大的靈活性。
最後將方法彙總構成乙個不可改變的模版方法。
模版方法模式的適用場景
1.演算法或操作遵循相似的邏輯
2.重構時(把相同的**抽取到父類中)
3.重要、複雜的演算法,核心演算法設計為模版演算法
模版方法模式的優點
封裝性好:封裝了乙個演算法的框架,將演算法的具體步驟封裝成乙個通用的模版方法
復用性好:抽取共性的方式,大部分**在父類實現,個性化邏輯由子類實現
遮蔽細節:很多共性作為私有方法在抽象基類中實現,最子類遮蔽了很多細節
便於維護:好的復用性可以減少**框架的設計,支援更加靈活的業務變更
模版方法模式的缺點
每乙個不同的實現都需要乙個子類來實現,導致類的個數增加,使得系統更加龐大。
設計模式之模版模式
模板方法模式是類的行為模式。準備乙個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法模式的用意。模版方法模式 父類宣告抽象方法,子類做具體實現 父類引用指向子...
設計模式之 模版模式
在我們平時的編碼工作中,經常會有一些流程步驟基本相同,只是中間有部分細節不同的業務流程,比如我們自己要實現乙個基於redis快取的模版方法,在redis中存在指定值時,則返回redis中快取的資料 如果redis中不存在,則查詢db,並把查詢所得快取起來,並返回查詢所得。這個例子就是用模版模式再好不...
設計模式之模板方法模式 慕課網筆記
第1章 模板方法模式初探 1 1 什麼是模板方法模式 模板方法模式template method 1.什麼是模板方法模式 2.如何實現模板方法模式 3.模板方法模式的特點 4.模板方法模式在專案中的應用 生活中的模板 1.進門取號 2.填寫單據 3.等待叫號 4.視窗辦理 奧運會開幕式 1.公升國旗...