1. 程式人生 > >Spring框架中的java設計模式

Spring框架中的java設計模式

1、工廠模式:在各種BeanFactory以及ApplicationContext建立中都用到了

2、模版模式:在各種BeanFactory以及ApplicationContext實現中也都用到了

      定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。 模板方法使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。通俗的說的就是有很多相同的步驟的,在某一些地方可能有一些差別適合於這種模式,如大話設計模式中說到的考試場景中,每個人的試卷都是一樣的,只有答案不一樣。這種場景就適合於模板方法模式。我這次自己寫的是一個汽車啟動的過程,每一種汽車啟動的過程都基本是一樣的流程,無非是這一過程中存在一些細小差別。

      相關程式碼

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

package com.roc.template;

/**

* 汽車模型

* 模型模式

* @author liaowp

*

*/

public abstract

 class CarModel {

/**

* 汽車啟動

*/

protected abstract void start();

/**

* 停車

*/

protected abstract void stop();

/**

* 使用者並不需要關注你的車怎麼啟動或者停下來的,可以開可以停就可以啦

*/

final public void excet(){

this.start();

this.stop();

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package com.roc.template;

/**

* 大眾車

* @author liaowp

*

*/

public class Wcar extends CarModel{

@Override

protected void start() {

System.out.println("大眾車啟動 。。。。。。。。突突突");

}

@Override

protected void stop() {

System.out.println("大眾車停車。。。。。。。。。");

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

package com.roc.template;

public class Ocar extends CarModel{

@Override

protected void start() {

System.out.println("奧迪  無匙啟動               突突突");

}

@Override

protected void stop() {

System.out.println("奧迪  停車              ");

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

package com.roc.template;

/**

* 客戶端

* @author liaowp

*

*/

public class Client {

public static void main(String[] args) {

CarModel wcar=new Wcar();//家裡的第一輛車,作為使用者的我們並不需要關注車怎麼啟動的.子類變數變為父類。多型

wcar.excet();

//突然家裡需要第二輛車了   奧迪     我們也不需要關注他怎麼生產啟動的   

CarModel ocar=new Ocar();

ocar.excet();

}

}

模板方法模式適用場景

  • 一次性實現一個演算法的不變的部分,並將可變的行為留給子類來實現。

  • 各子類中公共的行為應被提取出來並集中到一個公共父類中以避免程式碼重複。這是Opdyke和Johnson所描述過的“重分解以一般化”的一個很好的例子。首先識別現有程式碼中的不同之處,並且將不同之處分離為新的操作。最後,用一個呼叫這些新的操作的模板方法來替換這些不同的程式碼。

  • 控制子類擴充套件。模板方法只在特定點呼叫“hook”操作,這樣就只允許在這些點進行擴充套件

3、單例模式:保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點

  spring中的單例模式完成了後半句話,即提供了全域性的訪問點BeanFactory。但沒有從構造器級別去控制單例,這是因為spring管理的是是任意的java物件。核心提示點:Spring下預設的bean均為singleton,可以通過singleton=“true|false” 或者 scope=“?”來指定。

4、代理模式:在Spring的Aop中,使用的Advice(通知)來增強被代理類的功能。Spring實現這一AOP功能的原理就使用代理模式(1、JDK動態代理。2、CGLib位元組碼生成技術代理。)對類進行方法級別的切面增強,即,生成被代理類的代理類, 並在代理類的方法前,設定攔截器,通過執行攔截器重的內容增強了代理方法的功能,實現的面向切面程式設計。

5、策略模式:第一個地方,載入資原始檔的方式,使用了不同的方法,比如:ClassPathResourece,FileSystemResource,ServletContextResource,UrlResource但他們都有共同的藉口Resource;第二個地方就是在Aop的實現中,採用了兩種不同的方式,JDK動態代理和CGLIB代理;(策略模式就是將有共性的行為抽象為一個介面,其中有此種行為的宣告。該介面的實現類都實現了這個行為,但是提供了不同的行為表現,也就是說都是支付,有用網銀的,也有用支付寶的。在執行此類行為的類中含有該介面的引用,在執行行為前要確定該行為的表現,選擇適合的執行)

6、觀察者模式:定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。spring中Observer模式常用的地方是listener的實現。如ApplicationListener。

相關推薦

Yii框架MVC設計模式

MVC是模型(Model)、檢視(View)、控制器(Controller)3個單詞的縮寫。 Model是指資料模型,是對客觀事物的抽象。 如一篇部落格文章,我們可能會以一個Post類來表示,那麼,這個Post類就是資料物件。 同時,部落格文章還有一些業務邏輯,如釋出、回收、評論

Spring框架自動裝配模式的區別

spring的自動裝配功能的定義:無須在Spring配置檔案中描述javaBean之間的依賴關係(如配置<property>、<constructor-arg>)。IOC容器會自動建立javabean之間的關聯關係。 簡而言之,一個類就是一個Bean,Spring框架是一個Bean容

MyBatis框架設計模式

前言:     前幾篇文章從原始碼角度分析了Mybatis框架,當然,作為一個優秀的框架,設計模式的使用也是必不可少的。     本文,作者便簡單介紹下Mybatis設計模式的使用場景 1.工廠模式     網上好多說SqlSessionFactory是工廠模

Spring框架java設計模式

1、工廠模式:在各種BeanFactory以及ApplicationContext建立中都用到了 2、模版模式:在各種BeanFactory以及ApplicationContext實現中也都用到了       定義一個操作中的演算法的骨架,而將一些步驟延遲到子

Spring 框架都用到的設計模式

Spring框架中使用到了大量的設計模式,下面列舉了比較有代表性的: 代理模式—在AOP和remoting中被用的比較多。單例模式—在spring配置檔案中定義的bean預設為單例模式。模板方法—用來解決程式碼重複的問題。比如. RestTemplate, JmsTemp

漫談 GOF 設計模式Spring 框架的實現

原文地址:樑桂釗的部落格 部落格地址:http://blog.720ui.com 歡迎關注公眾號:「服務端思維」。一群同頻者,一

重學 Java 設計模式:實戰代理模式「模擬mybatis-spring定義DAO介面,使用代理類方式操作資料庫原理實現場景」

![](https://img-blog.csdnimg.cn/20200616224007303.png) 作者:小傅哥 部落格:[https://bugstack.cn](https://bugstack.cn) >沉澱、分享、成長,讓自己和他人都能有所收穫!

設計模式(二十一)——直譯器模式(Spring 框架SpelExpressionParser原始碼分析)

1 四則運算問題 通過直譯器模式來實現四則運算,如計算 a+b-c 的值,具體要求 1) 先輸入表示式的形式,比如 a+b+c-d+e,  要求表示式的字母不能重複 2) 在分別輸入 a ,b, c, d, e 的值 3) 最後求出結果:如

JAVA異常基本知識及異常在Spring框架的整體解決方案

我們 程序 details 編譯錯誤 htm 及其 arch extends exception 異常的頂級父類是Throwable,下面有兩個子類Exception和Error。 Error錯誤一般是虛擬機相關的問題,如系統崩潰,虛擬機錯誤等,應用程序無法處理,直接導致

工廠模式(think in java設計模式

org 我們 import lac otf 返回值 類型 int ava 工廠模式:工廠模式是利用工廠類的工廠方法創建對象的一種設計模式,目的是創建對象,但是很多時候創建對象我們會考慮很多其他因素~~~~比如限定輸入,限定返回值是否某個,比如在創建的過程中進行一些判斷,通過

叠代器模式(think in java設計模式

一個 div 封裝 imp 叠代器 方法 println rri 數字 叠代器模式:用來叠代一個容器集合數組的一種模式。可能大家很多時候是用for循環進行叠代的,但是實際上for循環內部不能使用remove方法,但是叠代器可以,這是因為叠代器內部進行了該方法的邏輯處理。同樣

模板方法模式(think in java設計模式

方法 bst pac code pri ack 單點 size clas 模板方法模式:模板方法模式顧名思義就是一種構造模塊化的設計模式。將一次行為分為多種行為,靈活的調用不同模塊進行工作。比如在飯店吃飯,分為:點菜,吃飯,買單等行為無論什麽飯店大致都是這三種行為。因此我們

詳解JavaSpring框架的註解的用法

控制 extends 進行 -i 場景 1.7 遞歸 ins 規範 轉載:http://www.jb51.net/article/75460.htm 1. 使用Spring註解來註入屬性 1.1. 使用註解以前我們是怎樣註入屬性的 類的實現: class UserMa

Java設計模式(七):觀察者模式

name int 還要 The else 意圖 http exceptio 所有 介紹 觀察者模式是行為設計模式之一。當您對對象的狀態感興趣並希望在有任何更改時收到通知時,觀察者設計模式非常有用。在觀察者模式中,監視另一個對象狀態的對象稱為Observer,正在被監視的對象

Java設計模式(八):建造者模式

伸縮 null clas 示例代碼 最簡 裝配 角色扮演 app 但是 介紹 今天我們將研究java中的Builder模式。Builder 設計模式是一種創造性的設計模式,如工廠模式和抽象工廠模式。 當Object包含許多屬性時,引入了Builder模式來解決Factory

Java併發程式設計設計模式解析(二)一個單例的七種寫法

Java單例模式是最常見的設計模式之一,廣泛應用於各種框架、中介軟體和應用開發中。單例模式實現起來比較簡單,基本是每個Java工程師都能信手拈來的,本文將結合多執行緒、類的載入等知識,系統地介紹一下單例模式的演變,並體現在7種不同的單例設計中。說到這個,非常像孔乙己裡那個“回字有四種寫法”的梗,不過與封建迂腐

Spring設計模式

又是 管理 pla day gif 關聯 動態代理 代理 aop 簡單工廠模式:實質是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類。spring中的BeanFactory就是簡單工廠模式的體現,根據傳入一個唯一的標識來獲得bean對象,但是否是在傳入參數後創建還

基於spring框架java開發的異常處理

在springmvc框架的中異常處理的方式有兩種: 1,在控制器中使用@ExceptionHandler(xxxException.class)註解修飾一個方法,該註解能夠處理通一個控制器類中的丟擲的xxxExcepiton異常。 使用控制器通知註解@ControllerAdvice

java設計模式之單例模式、工廠模式

Java中的設計模式            轉載地址:https://www.toutiao.com/i6573486403282272775/ 為什麼要學習設計模式 1)設計模式都是一些相對優秀的解決方案,很多問題都是典型的

spring設計模式——動態代理(一)

前言 今天一定要把這一篇部落格補上,前段時間看了看動態代理的jdk方式如何實現,用起來簡單,但是jdk中的實現就不那麼容易了~~ 代理模式的特點 有執行者、被代理者兩種角色 這件