更多課程 選擇中心
        Java培訓

        400-111-8989

        Java培訓 > Java教程  > 正文

        從現實生活理解Spring中常用的設計模式

        • 發布:Java培訓
        • 來源:Java教程
        • 時間:2018-04-19 10:57

        一、Spring 中常用的設計模式

        1、我們通常說的 23 中經典設計模式可以通過下表一目了然:

        創建型

        工廠方法模式(FactoryMethod)、抽象工廠模式(AbstractFactory)、 建造者模式(Builder)、原型模式(Prototype)、單例模式(Singleton)

        結構型

        適配器模式(Adapter)、橋接模式(Bridge)、組合模式(Composite)、 裝飾器模式(Decorator)、門面模式(Facade)、享元模式(Flyweight)、 代理模式(Proxy)

        行為型

        解釋器模式(Interpreter)、模板方法模式(TemplateMethod)、 責任鏈模式(ChainofResponsibility)、命令模式(Command)、 迭代器模式(Iterator)、調解者模式(Mediator)、備忘錄模式(Memento)、 觀察者模式(Observer)、狀態模式(State)、策略模式(Strategy)、 訪問者模式(Visitor)

        通常來說,設計模式都是混合使用,不會獨立應用。利用窮舉法充分理解設計模式的應用場景。在平時 的應用中,不是用設計模式去生搬硬套,而是根據具體業務問題需要時借鑒。

        2、設計模式在應用中遵循六大原則:

        a、開閉原則(Open Close Principle) 開閉原則就是說對擴展開放,對修改關閉。在程序需要進行拓展的時候,不能去修改原有的代碼,實現 一個熱插拔的效果。所以一句話概括就是:為了使程序的擴展性好,易于維護和升級。想要達到這樣的 效果,我們需要使用接口和抽象類,后面的具體設計中我們會提到這點。

        b、里氏代換原則(Liskov Substitution Principle) 里氏代換原則(Liskov Substitution Principle LSP)面向對象設計的基本原則之一。 里氏代換原 則中說,任何基類可以出現的地方,子類一定可以出現。 LSP 是繼承復用的基石,只有當衍生類可以 替換掉基類,軟件單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增 加新的行為。里氏代換原則是對“開-閉”原則的補充。實現“開-閉”原則的關鍵步驟就是抽象化。而 基類與子類的繼承關系就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規范。

        c、依賴倒轉原則(Dependence Inversion Principle) 這個是開閉原則的基礎,具體內容:針對接口編程,依賴于抽象而不依賴于具體。

        d、接口隔離原則(Interface Segregation Principle) 這個原則的意思是:使用多個隔離的接口,比使用單個接口要好。還是一個降低類之間的耦合度的意思, 從這兒我們看出,其實設計模式就是一個軟件的設計思想,從大型軟件架構出發,為了升級和維護方便。 所以上文中多次出現:降低依賴,降低耦合。 e、迪米特法則(最少知道原則)(Demeter Principle)

        為什么叫最少知道原則,就是說:一個實體應當盡量少的與其他實體之間發生相互作用,使得系統功能 模塊相對獨立。

        f、合成復用原則(Composite Reuse Principle) 原則是盡量使用合成/聚合的方式,而不是使用繼承。 設計模式之間的關系圖

        從現實生活理解Spring中 常用的設計模式

        接下來我們只介紹在 Spring 中常用的設計模式。

        1.1、簡單工廠模式(Factory)

        應用場景:又叫做靜態工廠方法(StaticFactory Method)模式,但不屬于 23 種設計模式之一。 簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類。 Spring 中的 BeanFactory 就是簡單工廠模式的體現,根據傳入一個唯一的標識來獲得 Bean 對象,但 是否是在傳入參數后創建還是傳入參數前創建這個要根據具體情況來定。

        從現實生活理解Spring中 常用的設計模式

        1.2、工廠方法模式(Factory Method)

        應用場景:通常由應用程序直接使用 new 創建新的對象,為了將對象的創建和使用相分離,采用工廠模 式,即應用程序將對象的創建及初始化職責交給工廠對象。 一般情況下,應用程序有自己的工廠對象來創建 Bean.如果將應用程序自己的工廠對象交給 Spring 管 理,那么 Spring 管理的就不是普通的 Bean,而是工廠 Bean。

        從現實生活理解Spring中 常用的設計模式

        1.3、單例模式(Singleton)

        應用場景:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。 Spring 中的單例模式完成了后半句話,即提供了全局的訪問點 BeanFactory。但沒有從構造器級別去 控制單例,這是因為 Spring 管理的是是任意的 Java 對象。 Spring 下默認的 Bean 均為單例。

        從現實生活理解Spring中 常用的設計模式

        常用單例模式寫法:餓漢式、懶漢式、注冊式、序列化。

        1.4、原型模式(Prototype)

        應用場景:原型模式就是從一個對象再創建另外一個可定制的對象,而且不需要知道任何創建的細節。 所謂原型模式,就是 Java 中的克隆技術,以某個對象為原型。復制出新的對象。顯然新的對象具備原 型對象的特點,效率高(避免了重新執行構造過程步驟)。

        從現實生活理解Spring中 常用的設計模式

        1.5、代理模式(Proxy)

        應用場景:為其他對象提供一種代理以控制對這個對象的訪問。從結構上來看和 Decorator 模式類似, 但 Proxy 是控制,更像是一種對功能的限制,而 Decorator 是增加職責。 Spring 的 Proxy 模式在 AOP 中有體現,比如 JdkDynamicAopProxy 和 Cglib2AopProxy。

        從現實生活理解Spring中 常用的設計模式

        1.6、策略模式(Strategy)

        應用場景:定義一系列的算法,把它們一個個封裝起來,并且使它們可相互替換。本模式使得算法可獨 立于使用它的客戶而變化。 Spring 中在實例化對象的時候用到 Strategy 模式,在 SimpleInstantiationStrategy 有使用。

        從現實生活理解Spring中 常用的設計模式

        1.7、模板方法模式(Template Method)

        定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。Template Method 使得子類可以不改變 一個算法的結構即可重定義該算法的某些特定步驟。 TemplateMethod 模式一般是需要繼承的。這里想要探討另一種對 TemplateMethod 的理解。Spring 中的 JdbcTemplate,在用這個類時并不想去繼承這個類,因為這個類的方法太多,但是我們還是想用 到 JdbcTemplate 已有的穩定的、公用的數據庫連接,那么我們怎么辦呢?我們可以把變化的東西抽出 來作為一個參數傳入 JdbcTemplate 的方法中。但是變化的東西是一段代碼,而且這段代碼會用到 JdbcTemplate 中的變量。怎么辦?那我們就用回調對象吧。在這個回調對象中定義一個操縱 JdbcTemplate 中變量的方法,我們去實現這個方法,就把變化的東西集中到這里了。然后我們再傳入 這個回調對象到 JdbcTemplate,從而完成了調用。這就是 Template Method 不需要繼承的另一種實 現方式。

        從現實生活理解Spring中 常用的設計模式

        1.8、委派模式(Delegate)

        應用場景:不屬于 23 種設計模式之一,是面向對象設計模式中常用的一種模式。這種模式的原理為類 B 和類 A 是兩個互相沒有任何關系的類,B 具有和 A 一模一樣的方法和屬性;并且調用 B 中的方法,屬性就是調用 A 中同名的方法和屬性。B 好像就是一個受 A 授權委托的中介。第三方的代碼不需要知道 A 的 存在,也不需要和 A 發生直接的聯系,通過 B 就可以直接使用 A 的功能,這樣既能夠使用到 A 的各種功 能,又能夠很好的將 A 保護起來了,一舉兩得。

        從現實生活理解Spring中 常用的設計模式

        1.9、適配器模式(Adapter)

        Spring AOP 模塊對 BeforeAdvice、AfterAdvice、ThrowsAdvice 三種通知類型的支持實際上是借 助適配器模式來實現的,這樣的好處是使得框架允許用戶向框架中加入自己想要支持的任何一種通知類 型,上述三種通知類型是 Spring AOP 模塊定義的,它們是 AOP 聯盟定義的 Advice 的子類型。

        從現實生活理解Spring中 常用的設計模式

        1.10、裝飾器模式(Decorator)

        應用場景:在我們的項目中遇到這樣一個問題:我們的項目需要連接多個數據庫,而且不同的客戶在每 次訪問中根據需要會去訪問不同的數據庫。我們以往在 Spring 和 Hibernate 框架中總是配置一個數據 源,因而 SessionFactory 的 DataSource 屬性總是指向這個數據源并且恒定不變,所有 DAO 在使用 SessionFactory 的時候都是通過這個數據源訪問數據庫。但是現在,由于項目的需要,我們的 DAO 在 訪問 SessionFactory 的時候都不得不在多個數據源中不斷切換,問題就出現了:如何讓 SessionFactory 在執行數據持久化的時候,根據客戶的需求能夠動態切換不同的數據源?我們能不能 在 Spring 的框架下通過少量修改得到解決?是否有什么設計模式可以利用呢?

        首先想到在 Spring 的 ApplicationContext 中配置所有的 DataSource。這些 DataSource 可能是各 種不同類型的,比如不同的數據庫:Oracle、SQL Server、MySQL 等,也可能是不同的數據源:比如 Apache 提 供 的 org.apache.commons.dbcp.BasicDataSource 、 Spring 提 供 的 org.springframework.jndi.JndiObjectFactoryBean 等。然后 SessionFactory 根據客戶的每次 請求,將 DataSource 屬性設置成不同的數據源,以到達切換數據源的目的。 Spring 中用到的包裝器模式在類名上有兩種表現:一種是類名中含有 Wrapper,另一種是類名中含有 Decorator。基本上都是動態地給一個對象添加一些額外的職責。

        從現實生活理解Spring中 常用的設計模式

        1.11、觀察者模式(Observer)

        應用場景:定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象 都得到通知并被自動更新。 Spring 中 Observer 模式常用的地方是 Listener 的實現。如 ApplicationListener。

        從現實生活理解Spring中 常用的設計模式

        1.12、各設計模式對比及編程思想總結 設計模式 一句話歸納 工廠模式

        從現實生活理解Spring中 常用的設計模式

        編程思想總結

        從現實生活理解Spring中 常用的設計模式

        推薦閱讀目錄

        ⊙ Java學習求職路線(資料、視頻、源碼、項目實戰)

        ⊙ 程序員用這5種方式學習編程最無效,停止這些可以少走彎路!

        ⊙大學畢業剛培訓完Java,沒有經驗怎么找工作呢?

        ⊙請問你知道什么是棧嗎?

        ⊙看看你對隊列的了解有多少?

        ⊙面試題68(加深你對棧的理解_讓你知道什么是棧)

        ⊙來測試一下你對數據結構中的棧和隊列的了解有多少?

        ⊙面試題63(鏈表,哈希表)

        ⊙ 請你對Java中樹的了解有多少?

        ⊙ 這個培訓機構怎么?

        ⊙ JavaEE就業學習路線(給初學者以及自學者一個學習方向)?

        ⊙ Servlet實現一個簡單的登錄【驗證碼】功能

        ⊙二維碼生成源碼

        ⊙java學習微信討論群

        推薦Java學習小程序

        從現實生活理解Spring中 常用的設計模式

        感謝大家閱讀由Java教程分享的“從現實生活理解Spring中 常用的設計模式”希望對大家有所幫助,更多精彩內容請關注Java培訓官網

        免責聲明:本文由小編轉載自網絡,旨在分享提供閱讀,版權歸原作者所有,如有侵權請聯系我們進行刪除

        預約申請免費試聽課

        填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

        上一篇:Java程序員必須掌握的英語詞組
        下一篇:剛開始學編程?這幾款小工具能讓你事半功倍
        12大要點讓你的Java開發所向披靡~

        12大要點讓你的Java開發所向披靡~

        學習Java最好的12本免費在線電子書

        學習Java最好的12本免費在線電子書

        Java常用日志框架介紹

        Java常用日志框架介紹

        一篇文章了解RPC框架原理

        一篇文章了解RPC框架原理

        • 掃碼領取資料

          回復關鍵字:視頻資料

          免費領取 達內課程視頻學習資料

        • 視頻學習QQ群

          添加QQ群:1143617948

          免費領取達內課程視頻學習資料

        Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

        選擇城市和中心
        貴州省

        福建省

        • 達內廈門軟件園中心
        廣西省

        海南省

        国产高清情侣视频2019年,限制电影福利在线观看,23伊人大香蕉 百度 好搜 搜狗
        <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>