模板模式:
模板模式屬于行為型模式中的一員, 此模式中, 類對(duì)外公開定義一個(gè)函數(shù)表示自己的行為(要做什么).
例: 我們常用的操作系統(tǒng)有Windows/ macOS/ Linux等, 當(dāng)我們首次使用時(shí)都會(huì)進(jìn)行開機(jī)/ 輸入密碼的操作, 此時(shí)我們可以將開機(jī)/ 輸入密碼函數(shù)進(jìn)行封裝并對(duì)外提供一個(gè)系統(tǒng)初始化的操作. 整體運(yùn)用的模式我們稱之為模板模式.
為什么要使用此模式呢茅信?
- 封裝不變部分盾舌,擴(kuò)展可變部分
- 提取公用代碼, 便于維護(hù)
- 行為由父類進(jìn)行控制, 子類實(shí)現(xiàn)
說了這么多, 下面我們看一個(gè)簡(jiǎn)單例子.
1.AbsSystem
AbsSystem為模板類, startUp/ inputPassword為模板函數(shù), iniSystem主要封裝了模板行為.
public abstract class AbsSystem {
abstract void startUp();//開機(jī)
abstract void inputPassword();//輸入密碼
/**
* 使用電腦
*/
public final void iniSystem() {
startUp();
inputPassword();
}
}
2.Linux
Linux繼承了模板類(AbsSystem)是對(duì)抽象行為的具體實(shí)現(xiàn), 我們可以在startUp/ inputPassword函數(shù)中進(jìn)行業(yè)務(wù)處理這里只做簡(jiǎn)單打印.
public class Linux extends AbsSystem{
@Override
void startUp() {
// TODO Auto-generated method stub
System.out.println("Linux startUp");
}
@Override
void inputPassword() {
// TODO Auto-generated method stub
System.out.println("Linux inputPassword");
}
}
3.Windows
Windows如上, 同是模板類的具體實(shí)現(xiàn), 開機(jī)操作在startUp函數(shù)中進(jìn)行, 輸入密碼在inputPassword中進(jìn)行.
public class Windows extends AbsSystem{
@Override
void startUp() {
// TODO Auto-generated method stub
System.out.println("Windows startUp");
}
@Override
void inputPassword() {
// TODO Auto-generated method stub
System.out.println("Windows inputPassword");
}
}
4.Test
Test為一個(gè)測(cè)試類, 通過以下代碼我們可以看出當(dāng)Linux或者Windows在未開機(jī)的狀態(tài)下只需調(diào)用iniSystem函數(shù)足矣, 在使用上比較方便.
public class Test {
public static void main(String[] args) {
Linux linux = new Linux();
linux.iniSystem();
Windows windows = new Windows();
windows.iniSystem();
}
}
下面是運(yùn)行結(jié)果圖
總結(jié):
主要解決:一些方法通用, 卻在每一個(gè)子類都重新編寫.
何時(shí)使用:class具有相同的功能
關(guān)鍵代碼:頂層類對(duì)外提供一個(gè)final函數(shù)對(duì)模板進(jìn)行封裝.
優(yōu)點(diǎn):父類封裝不變部分, 子類擴(kuò)展可變部分; 行為交給父類進(jìn)行定義, 子類具體實(shí)現(xiàn)
;
缺點(diǎn):每一個(gè)不同的實(shí)現(xiàn)都需要一個(gè)子類來實(shí)現(xiàn), 導(dǎo)致類的個(gè)數(shù)增加, 使得系統(tǒng)更加龐大.
更多設(shè)計(jì)模式請(qǐng)看這里:
http://www.reibang.com/u/eb77504b1d68
喜歡有幫助的話: 雙擊、評(píng)論蘸鲸、轉(zhuǎn)發(fā)妖谴,動(dòng)一動(dòng)你的小手讓更多的人知道!關(guān)注 帥比-楊