模板方法模式
在模板模式(Template Pattern)中,一個抽象類公開定義了執行它的方法的方式/模板,它的子類可以按需要重寫方法實作,但呼叫將以抽象類中定義的方式進行,這種型別的設計模式屬于行為型模式,
優點:
- 封裝不變部分,擴展可變部分,
- 提取公共代碼,便于維護,
- 行為由父類控制,子類實作,
缺點:
每一個不同的實作都需要一個子類來實作,導致類的個數增加,使得系統更加龐大,
使用場景:
- 有多個子類共有的方法,且邏輯相同,
- 重要的、復雜的方法,可以考慮作為模板方法,
類圖如下

實體代碼
package com.jack.idea.test.designmode;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 模板方法模式
*
* @author ljs.song
* @date 2018-01-02 15:22
*/
public class Template {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
//季度分享電影短片開始 順序回顧每個人的分享流程
ShareTemp xiaojieShare = new XiaoJieShare();
xiaojieShare.share(calendar.getTime(),"三樓接待室");
ShareTemp xiaochenshare = new XiaoChenShare();
calendar.set(Calendar.DAY_OF_MONTH,10);
xiaochenshare.share(calendar.getTime(),"總裁辦公室");
ShareTemp xiaolongShare = new XiaoLongShare();
calendar.set(Calendar.HOUR_OF_DAY,23);
xiaolongShare.share(calendar.getTime(),"宇宙中心");
}
}
/**
* 分享模板抽象類
*/
abstract class ShareTemp{
private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH");
private Date date;
private String location;
public void share(Date date,String location){
//步驟1 首先預定時間和場地
getTime(date,location);
//步驟2 開始真正的分享
shareContent();
//步驟3 分享結束,討論并關閉投影儀
end();
}
/**
* 步驟1 ,預定時間和地點 當然這些也可以作為抽象方法
*/
private void getTime(Date date,String location){
System.out.println("1. 我想在" + SIMPLE_DATE_FORMAT.format(date) + " ,在" + location + "發起分享,歡迎來看");
}
/**
* 需要子類具體實作
*/
abstract void shareContent();
private void end(){
System.out.println("3. 我今天的分享到這里,謝謝大家");
System.out.println("*************關閉投影****************************");
}
}
/**
* 小杰分享
*/
class XiaoJieShare extends ShareTemp{
@Override
void shareContent() {
System.out.println("2. 我今天分享的內容是設計模式");
}
}
/**
* 小龍分享
*/
class XiaoLongShare extends ShareTemp{
@Override
void shareContent() {
System.out.println("2. 我今天分享的內容是自動化測驗");
}
}
/**
* 小臣分享
*/
class XiaoChenShare extends ShareTemp{
@Override
void shareContent() {
System.out.println("2. 我今天分享的內容是變成規范之我見");
}
}
轉載請注明出處 阿布的夏天
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/46471.html
標籤:設計模式
上一篇:工廠模式,從第三方登錄說起
