設計模式之----Java模板模式
模板模式
又叫模板方法模式,是指定義一個演算法的骨架,並允許子類為一個或者多個步驟提供實現;模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟;屬於行為性設計模式。
列舉:公開網課的過程;1.先發布預習資料;2.製作PPT課件;3.線上直播;4 .提交筆記;5.提交原始碼;6.佈置作業(有的課程有作業,有的沒有)這個流程;
步驟1.定義好父類,以及公共的方法;
public abstract class NetworkCourse {
protected final void createCourse(){
//1、釋出預習資料
this.postPreResource();
//2、製作PPT課件
this.createPPT();
//3、線上直播
this.liveVideo();
//4、提交課件、課堂筆記
this.postNote();
//5、提交原始碼
this.postSource();
//6、佈置作業,有些課是沒有作業,有些課是有作業的
//如果有作業的話,檢查作業,如果沒作業,完成了
if(needHomework()){
checkHomework();
}
}
abstract void checkHomework();
//鉤子方法:實現流程的微調
protected boolean needHomework(){return false;}
final void postSource(){
System.out.println("提交原始碼");
}
final void postNote(){
System.out.println("提交課件和筆記");
}
final void liveVideo(){
System.out.println("直播授課");
}
final void createPPT(){
System.out.println("建立備課PPT");
}
final void postPreResource(){
System.out.println("分發預習資料");
}
}
步驟2.Java網課的具體實現;只實現不同的,相同的就用父類的;
public class JavaCourse extends NetworkCourse {
void checkHomework() {
System.out.println("檢查Java的架構課件");
}
}
同理,大資料課程也有自己對應的實現;
public class BigDataCourse extends NetworkCourse {
private boolean needHomeworkFlag = false;
public BigDataCourse(boolean needHomeworkFlag) {
this.needHomeworkFlag = needHomeworkFlag;
}
void checkHomework() {
System.out.println("檢查大資料的課後作業");
}
@Override
protected boolean needHomework() {
return this.needHomeworkFlag;
}
}
步驟3.進行測試
public static void main(String[] args) {
System.out.println("---Java架構師課程---");
NetworkCourse javaCourse = new JavaCourse();
javaCourse.createCourse();
System.out.println("---大資料課程---");
NetworkCourse bigDataCourse = new BigDataCourse(true);
bigDataCourse.createCourse();
}
總結:
模板方法的角色:
1.抽象模板角色:它一般是一個抽象類或者介面,它抽象出操作演算法骨架;
2.具體抽象模板角色:它實現了抽象模板角色的方法,它是操作演算法骨架業務的具體化。
模板方法的優點:
1.封裝不變的部分,擴充套件可變部分。
2.提取了公共程式碼,便於維護。
3.行為由父類控制,子類實現。
模板方法的缺點:
每一個不同的實現都需要一個子類來實現,這樣導致類的個數增加。
程式碼地址為:https://github.com/virtuousOne/Design-patterns
相關文章
- Java設計模式之(十三)——模板方法模式Java設計模式
- 13.java設計模式之模板模式Java設計模式
- JAVA設計模式之模板方法Java設計模式
- Java設計模式——模板設計模式Java設計模式
- 折騰Java設計模式之模板方法模式Java設計模式
- Java設計模式之模板方法模式和建造者模式Java設計模式
- Java設計模式-模板方法模式Java設計模式
- 設計模式之【模板方法模式】設計模式
- 設計模式之模板方法模式設計模式
- java模板設計模式Java設計模式
- PHP設計模式之模板方法模式PHP設計模式
- Java描述設計模式(19):模板方法模式Java設計模式
- 設計模式之模板方法設計模式
- javascript設計模式 之 8 模板方法模式JavaScript設計模式
- 設計模式-模板模式設計模式
- 設計模式——模板模式設計模式
- Java設計模式之代理模式Java設計模式
- JAVA設計模式之策略模式Java設計模式
- Java設計模式之builder模式Java設計模式UI
- 設計模式-模板方法模式設計模式
- Java設計模式之策略模式示例Java設計模式
- Java設計模式之(五)——代理模式Java設計模式
- Java設計模式之(十四)——策略模式Java設計模式
- Java設計模式之單例模式Java設計模式單例
- Java設計模式之工廠模式Java設計模式
- 模板設計模式設計模式
- JAVA設計模式之 13.命令設計模式Java設計模式
- Java設計模式之介面卡設計模式Java設計模式
- Java設計模式系列之單例設計模式Java設計模式單例
- 23種設計模式之模板方法設計模式
- 設計模式漫談之模板方法設計模式
- python設計模式-模板方法模式Python設計模式
- js設計模式--模板方法模式JS設計模式
- 設計模式之模板方法模式(三分鐘學會一個設計模式)設計模式
- Java學設計模式之享元模式Java設計模式
- Java設計模式之(四)——原型模式Java設計模式原型
- Java設計模式之(三)——建造者模式Java設計模式
- Java設計模式之(二)——工廠模式Java設計模式