spring中用到的設計模式
refresh()方法使用的是模板方法模式
模板方法模式:
定義:定義一個模板結構,將具體方法延遲到子類中去實現。
主要作用:在不改變模板結構的前提下在子類中重新定義模板中的內容。
解決的問題:
- 提高程式碼複用性
將相同部分的程式碼放在抽象的父類中,而將不同的程式碼放入不同的子類中 - 實現了反向控制
通過一個父類呼叫其子類的操作,通過對子類的具體實現擴充套件不同的行為,實現了反向控制 & 符合“開閉原則”
例項:
a. 例項概況
- 背景:小成希望學炒菜:手撕包菜 & 蒜蓉炒菜心
- 衝突:兩道菜的炒菜步驟有的重複有的卻差異很大,記不住
- 解決方案:利用程式碼記錄下來
b. 使用步驟
步驟1: 建立抽象模板結構(Abstract Class):炒菜的步驟
public abstract class Abstract Class { //模板方法,用來控制炒菜的流程 (炒菜的流程是一樣的-複用) //申明為final,不希望子類覆蓋這個方法,防止更改流程的執行順序 final void cookProcess(){ //第一步:倒油 this.pourOil(); //第二步:熱油 this.HeatOil(); //第三步:倒蔬菜 this.pourVegetable(); //第四步:倒調味料 this.pourSauce(); //第五步:翻炒 this.fry(); } //定義結構裡哪些方法是所有過程都是一樣的可複用的,哪些是需要子類進行實現的 //第一步:倒油是一樣的,所以直接實現 void pourOil(){ System.out.println("倒油"); } //第二步:熱油是一樣的,所以直接實現 void HeatOil(){ System.out.println("熱油"); } //第三步:倒蔬菜是不一樣的(一個下包菜,一個是下菜心) //所以宣告為抽象方法,具體由子類實現 abstract void pourVegetable(); //第四步:倒調味料是不一樣的(一個下辣椒,一個是下蒜蓉) //所以宣告為抽象方法,具體由子類實現 abstract void pourSauce(); //第五步:翻炒是一樣的,所以直接實現 void fry();{ System.out.println("炒啊炒啊炒到熟啊"); } }
步驟2: 建立具體模板(Concrete Class),即”手撕包菜“和”蒜蓉炒菜心“的具體步驟
//炒手撕包菜的類 public class ConcreteClass_BaoCai extend Abstract Class{ @Override public void pourVegetable(){ System.out.println(”下鍋的蔬菜是包菜“); } @Override public void pourSauce(){ System.out.println(”下鍋的醬料是辣椒“); } } //炒蒜蓉菜心的類 public class ConcreteClass_CaiXin extend Abstract Class{ @Override public void pourVegetable(){ System.out.println(”下鍋的蔬菜是菜心“); } @Override public void pourSauce(){ System.out.println(”下鍋的醬料是蒜蓉“); } }
步驟3: **客戶端呼叫-炒菜了
public class Template Method{
public static void main(String[] args){
//炒 - 手撕包菜
ConcreteClass_BaoCai BaoCai = new ConcreteClass_BaoCai();
BaoCai.cookProcess();
//炒 - 蒜蓉菜心
ConcreteClass_ CaiXin = new ConcreteClass_CaiXin();
CaiXin.cookProcess();
}
}
結果輸出:
倒油
熱油
下鍋的蔬菜是包菜
下鍋的醬料是辣椒
炒啊炒啊炒到熟
倒油
熱油
下鍋的蔬菜是菜心
下鍋的醬料是蒜蓉
炒啊炒啊炒到熟
優點:
- 提高程式碼複用性
將相同部分的程式碼放在抽象的父類中 - 提高了拓展性
將不同的程式碼放入不同的子類中,通過對子類的擴充套件增加新的行為 - 實現了反向控制
通過一個父類呼叫其子類的操作,通過對子類的擴充套件增加新的行為,實現了反向控制 & 符合“開閉原則”
缺點:引入了抽象類,每一個不同的實現都需要一個子類來實現,導致類的個數增加,從而增加了系統實現的複雜度。
相關推薦
Spring 5 設計模式 - 使用代理和裝飾模式的Spring AOP
Spring 5 設計模式 - 使用代理和裝飾模式的Spring AOP Spring中的代理模式 什麼是AOP AOP要解決的問題 程式碼糾纏 程式碼分散 解決 AOP的核心術語
Spring 5 設計模式 - bean生命週期和使用的模式
Spring 5 設計模式 - bean生命週期和使用的模式 生命週期和階段 初始化階段 載入bean定義 初始化bean例項 使用BeanPostProcessor自定義bean 初始化擴充套件點
Spring 5 設計模式 - Dependency Injection
Spring 5 設計模式 - Dependency Injection 依賴注入模式 依賴注入模式的型別 基於構造器的 基於Setter方法的 二者的比較 使用Spring配置依賴注入模式 Java-based
Spring 5 設計模式 - Structural
Spring 5 設計模式 - Structural adapter Spring使用的介面卡模式 簡單的實現 Bridge Spring中的應用 簡單的實現 Composite
Spring 5 設計模式 - Creational
Spring 5 設計模式 - Creational Factory Spring的工廠模式 簡單的例子 Abstract factory Spring中的Abstract factory 簡單的例子
Spring 5 設計模式 - 開始
Spring 5 設計模式 - 開始 依賴注入 AOP template Spring容器 bean的生命週期 依賴注入 物件之間的依賴增加複雜性,導致物件之間緊耦合。 比如下面的TransferServi
spring的設計模式模式
spring中的設計模式 Spring框架是由於軟體開發的複雜性而建立的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限於伺服器端的開發。從簡單性、可測試性和鬆耦合性角度而言,絕大部分Java應用都
Spring框架設計模式分析
在Java web的開發過程中,目前企業級應用程式採用較多的開發框架是SSH(Spring+SpringMVC+Hibernate,用SpringMVC來代替Struts)。本文通過閱讀Spring的官方手冊和原始碼來分析Spring建立者的設計理念,主要梳理在
spring 與設計模式(建立型)之Builder模式
一、前言 將一個複雜的物件構建與它的表示分離,使得同樣的構建過程可以建立不同的表示,實現構建物件的過程與部件解耦。生活中許多這樣的例子,例如大學4年的學習,每一年的學習成績會最終影響4後的績點。電腦汽
spring中用到哪些設計模式?
turn 靜態工廠方法 scope value 經典 之一 決定 應該 客戶 設計模式作為工作學習中的枕邊書,卻時常處於勤說不用的尷尬境地,也不是我們時常忘記,只是一直沒有記憶。 Spring作為業界的經典框架,無論是在架構設計方面,還是在代碼編寫方面,都堪稱行內典範。好了
spring中用到哪些設計模式
1.工廠模式,這個很明顯,在各種BeanFactory以及ApplicationContext建立中都用到了; 2.模版模式,這個也很明顯,在各種BeanFactory以及ApplicationContext實現中也都用到了; 3.代理模式,在Aop實現中用到了JDK的動態代理; 4.單
設計模式——Spring IoC中用到的模板方法模式
http://www.cnblogs.com/gnidoc/p/4981447.html 基本概念 什麼是模板方法(Template method):父類定義了骨架(呼叫哪些方法及順序),某些特定方法由子類實現。 最大的好處:程式碼複用,減少重複程式碼。除了子類要實現
深入解析spring中用到的九種設計模式
設計模式作為工作學習中的枕邊書,卻時常處於勤說不用的尷尬境地,也不是我們時常忘記,只是一直沒有記憶。 今天,螃蟹在IT學習者網站就設計模式的內在價值做一番探討,並以spring為例進行講解,只有領略了其設計的思想理念,才能在工作學習中運用到“無形”。 Spri
spring中的設計模式(面試問題:spring中用了哪些設計模式)
設計模式作為工作學習中的枕邊書,卻時常處於勤說不用的尷尬境地,也不是我們時常忘記,只是一直沒有記憶。 今天,螃蟹在IT學習者網站就設計模式的內在價值做一番探討,並以spring為例進行講解,只有領略了其設計的思想理念,才能在工作學習中運用到“無形”。 Spring作為業界的經典框架,無論是在架構設計方面
spring中用到了哪些設計模式
1.單例模式物件的建立都是單例模式2.工廠模式beanfactory建立物件用的是工廠模式3.模版方法jdbcTemplate4.代理模式spring的AOP還有很多,但是暫時不懂,能說出來的就是這些。
spring中用到的設計模式
refresh()方法使用的是模板方法模式 模板方法模式: 定義:定義一個模板結構,將具體方法延遲到子類中去實現。 主要作用:在不改變模板結構的前提下在子類中重新定義模板中的內容。 解決的問題: 提高程式碼複用性 將相同部分的程式碼放在抽象的父類中,而將不同的
瞭解一下Spring中用了哪些設計模式?這樣回答面試官才穩
一:簡單工廠模式 又叫做靜態工廠方法(StaticFactory Method)模式,但不屬於23種GOF設計模式之一。 簡單工廠模式的實質是由一個工廠類根據傳入的引數,動態決定應該建立哪一個產品類。 spring中的BeanFactory就是簡單工廠模式的體現,根據傳入一個唯一的標識來獲得bean物件
設計模式 | Spring中用到的設計模式,你知道幾個?
>設計模式無處不在,因為它就來自於我們的日常生活,提煉於生活經驗。 > >正握在你手中的手機,不能用220V的電壓直接充電,需要一個專門的電源介面卡(充電器)才行。擺在你桌上的電腦也是一樣的,都需要“適配”。而 介面卡模式 (Adapter Pattern)正是由此總結而來。 從一個問題出
【設計模式】代理模式:靜態代理,動態代理,spring aop
spring 實現接口 找到 master 代碼 -s result java 統一 代理模式分為靜態代理和動態代理。我們拿鏈家來舉例子,我們本人是真實的對象,有真實的業務需求:需要去找房子;鏈家是中介,是代理類,他來幫我執行找房子的這個操作。 靜態代理: 1.實現一個
Spring 框架的設計理念與設計模式分析
問題 面向對象編程 -h oop ram 重要 原因 依賴 object 轉自: https://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring 的設計理念 前面介紹了 Spring 的三