介紹:
模板方法模式屬于行為型模式申尤。定義一個(gè)操作中的算法骨架,而將一些步驟延遲到子類中衙耕。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟昧穿。
類圖:
AbstractClass(抽象模板類):定義了一套算法框架。
ConcreteClass(具體實(shí)現(xiàn)類):實(shí)現(xiàn)模板方法步驟中未執(zhí)行的方法橙喘。
用法:
? 多個(gè)子類有公共的方法时鸵,并且邏輯基本相同時(shí)。
? 重要厅瞎、復(fù)雜的算法饰潜,可以把核心算法設(shè)計(jì)為模板方法,周邊的相關(guān)細(xì)節(jié)功能則由各個(gè)子類實(shí)現(xiàn)和簸。
? 重構(gòu)時(shí)彭雾,模板方法模式是一個(gè)經(jīng)常使用的模式,把相同的代碼抽到父類中锁保,然后通過(guò)子類約束其行為薯酝。
個(gè)人理解:
這個(gè)模式非常簡(jiǎn)單,實(shí)際上是封裝一個(gè)固定流程:第一步做什么爽柒、第二部做什么吴菠、第三部做什么....然后再用子類將步驟的方法進(jìn)行替換。
例子:
在App開(kāi)發(fā)中霉赡,不管是iOS還是Android橄务,我們每一個(gè)界面控制器都會(huì)有著很多相同的方法幔托,例如:初始化界面穴亏、初始化數(shù)據(jù)蜂挪、設(shè)置相同的主題等等操作∩せ可能很多朋友已經(jīng)在無(wú)意之中用到了這種模式棠涮,下面就讓我們?cè)贏ndoird上試一下:
需求:實(shí)現(xiàn)界面控制器的基類
1、繼承實(shí)現(xiàn)
1.1刺覆、新建一個(gè)BaseActivity基類
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
}
}
說(shuō)明一下:onCreate()中調(diào)用setContentView()加載界面布局严肪,每一個(gè)界面都有一個(gè)不同的xml文件和控制器綁定。沒(méi)有學(xué)過(guò)安卓的朋友也不難理解谦屑。
1.2驳糯、定義算法框架,修改BaseActivity基類
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_base); 子類實(shí)現(xiàn)
initData();
initView();
}
protected abstract void initData(); //加載數(shù)據(jù)
protected abstract void initView(); //加載界面
}
1.3氢橙、讓子類繼承BaseActivity類
public class TestActivity extends BaseActivity {
@Override
protected void initView() {
setContentView(R.layout.activity_test);
//findViewById()等操作
}
@Override
protected void initData() {
//初始化數(shù)據(jù)
}
}
我相信有不少朋友到這一步就完事了酝枢。每個(gè)控制器都有不同的界面布局文件,在initView方法中綁定一下悍手,看起來(lái)也沒(méi)錯(cuò)和挺方便帘睦。
在這里,其實(shí)只是實(shí)現(xiàn)了初步的繼承坦康,每一個(gè)子類都還需要實(shí)現(xiàn)一遍setContentView()的方法竣付。我們既然用了繼承,就應(yīng)該讓子類中所有重復(fù)的代碼都上升到父類去滞欠。
2古胆、模板方法模式實(shí)現(xiàn)
2.1、修改BaseActivity類
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(initLayout()); //重點(diǎn)是這句
initView();
initData();
}
protected abstract int initLayout(); //加載xml布局
protected abstract void initData(); //加載數(shù)據(jù)
protected abstract void initView(); //加載界面
}
在這里仑撞,我們把setContentView()的方法放回父類中赤兴,在每一個(gè)子類傳入布局id就可以了,繼續(xù)看一下:
2.2隧哮、修改子類
public class TestActivity extends BaseActivity {
@Override
protected int initLayout() {
return R.layout.activity_test;
}
@Override
protected void initView() {
//findViewById()等操作
}
@Override
protected void initData() {
//初始化數(shù)據(jù)
}
}
3桶良、總結(jié)
此模式總結(jié)概括就是流程封裝。非常的簡(jiǎn)單沮翔,相信大家也在無(wú)意之中用到了這種模式陨帆。那我們不妨再檢查下自己的代碼,有無(wú)存在1.1中提到的問(wèn)題~
感謝您的閱讀~
轉(zhuǎn)載請(qǐng)注明出處喔:http://www.reibang.com/p/98cb3f90660a
推薦閱讀
基礎(chǔ)篇:
設(shè)計(jì)模式前篇之——UML類圖必會(huì)知識(shí)點(diǎn)
設(shè)計(jì)模式前篇之——一起過(guò)一下面向?qū)ο蟮母拍?/a>
創(chuàng)建型模式:
簡(jiǎn)易理解設(shè)計(jì)模式之:簡(jiǎn)單工廠模式——來(lái)試試接入支付功能
簡(jiǎn)易理解設(shè)計(jì)模式之:工廠方法模式——數(shù)據(jù)存儲(chǔ)例子
簡(jiǎn)易理解設(shè)計(jì)模式之:抽象工廠模式——更換數(shù)據(jù)庫(kù)例子
簡(jiǎn)易理解設(shè)計(jì)模式之:建造者模式——學(xué)習(xí)使用“鏈?zhǔn)秸{(diào)用”
簡(jiǎn)易理解設(shè)計(jì)模式之:原型模式——深采蚀、淺拷貝的概念
簡(jiǎn)易理解設(shè)計(jì)模式之:?jiǎn)卫J健獑卫J降膸追N常用寫(xiě)法
結(jié)構(gòu)型模式:
簡(jiǎn)易理解設(shè)計(jì)模式之:適配器模式——Android列表視圖控件設(shè)計(jì)方式
簡(jiǎn)易理解設(shè)計(jì)模式之:橋接模式——穿衣服經(jīng)典案例2
簡(jiǎn)易理解設(shè)計(jì)模式之:組合模式——實(shí)現(xiàn)View中的樹(shù)狀結(jié)構(gòu)
簡(jiǎn)易理解設(shè)計(jì)模式之:裝飾模式——穿衣服經(jīng)典案例
簡(jiǎn)易理解設(shè)計(jì)模式之:外觀模式——第三方SDK的幫助類
簡(jiǎn)易理解設(shè)計(jì)模式之:享元模式——五子棋游戲例子
簡(jiǎn)易理解設(shè)計(jì)模式之:代理模式——iOS視圖控件設(shè)計(jì)方式
行為型模式:
簡(jiǎn)易理解設(shè)計(jì)模式之:策略模式——優(yōu)化一下支付功能
簡(jiǎn)易理解設(shè)計(jì)模式之:模板方法模式——Android中的BaseActivity基類
簡(jiǎn)易理解設(shè)計(jì)模式之:觀察者模式——監(jiān)聽(tīng)與回調(diào)
簡(jiǎn)易理解設(shè)計(jì)模式之:狀態(tài)模式——優(yōu)化登錄操作
簡(jiǎn)易理解設(shè)計(jì)模式之:備忘錄模式——Word文檔的工作原理
簡(jiǎn)易理解設(shè)計(jì)模式之:迭代器模式——遍歷對(duì)象的好幫手
簡(jiǎn)易理解設(shè)計(jì)模式之:命令模式——實(shí)現(xiàn)命令的參數(shù)化配置
簡(jiǎn)易理解設(shè)計(jì)模式之:責(zé)任鏈模式——OA中請(qǐng)假流程示例
簡(jiǎn)易理解設(shè)計(jì)模式之:中介者模式——多人聊天室例子
簡(jiǎn)易理解設(shè)計(jì)模式之:解釋器模式——語(yǔ)言和文法
簡(jiǎn)易理解設(shè)計(jì)模式之:訪問(wèn)者模式——員工考核例子