1. 程式人生 > >spring中用到的設計模式

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 的三