设计模式-模板方法(Template Method Patten)
生活随笔
收集整理的這篇文章主要介紹了
设计模式-模板方法(Template Method Patten)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
-
定義一個操作中算法的框架,而將一些步驟延遲到一些子類。使得子類可以不改變一個算法的結構即可重新定義改算法的某些特定步驟
先舉一個使用模板方法的小例子方便大家加深印象和理解
首先畫下類圖
?
image.png
?
結構比較簡單,看代碼就一目了染
首先我們建一個抽象電腦類
/*** @author shuliangzhao* @Title: Computer* @ProjectName design-parent* @Description: TODO* @date 2019/5/28 23:02*/ public abstract class Computer {protected abstract void open();protected abstract void close();public void run() {this.open();this.close();} }電腦cup是i5的實現類
/*** @author shuliangzhao* @Title: I5Computer* @ProjectName design-parent* @Description: TODO* @date 2019/5/28 23:04*/ public class I5Computer extends Computer {@Overrideprotected void open() {System.out.println("電腦cup是i5的開機");}@Overrideprotected void close() {System.out.println("電腦cup是i5的開機");} }電腦cup是i7實現類
/*** @author shuliangzhao* @Title: I7Computer* @ProjectName design-parent* @Description: TODO* @date 2019/5/28 23:04*/ public class I7Computer extends Computer {@Overrideprotected void open() {System.out.println("電腦cup是i7的開機");}@Overrideprotected void close() {System.out.println("電腦cup是i7的關機");} }客戶端
/*** @author shuliangzhao* @Title: Client* @ProjectName design-parent* @Description: TODO* @date 2019/5/28 23:05*/ public class Client {public static void main(String[] args) {Computer computer = new I5Computer();computer.run();Computer computer1 = new I7Computer();computer1.run();} }運行結構為:
?
?
注意:抽象模板的基本方法比如例子中的(open和close) 盡量設計為protected類型,不需要暴露的屬性和方法盡量不要設置為public
模板方法優點:
1.封裝不變部分,擴展可變部分,把認為不變部分方法封裝到父類實現,可變部分通過子類來繼承實現擴展。
2.提取公共代碼,便于維護。
3.行為由父類控制,子類實現
模板方法缺點:
一般來說抽象類負責聲明最抽象,最一般的屬性和方法,由實現類去完成。但是模板方法卻顛倒了,抽象類定義了部分抽象方法,由子類實現。也就是說子類結構影響了父類結果。
模板方法使用場景
1.子類有公共方法,邏輯差不多
總結
以上是生活随笔為你收集整理的设计模式-模板方法(Template Method Patten)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式-策略模式和工厂模式结合使用
- 下一篇: asp.net ajax控件工具集 Au