最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設計模式中的七大原則詳細講解

 更新時間:2023年02月17日 14:46:47   作者:非凡的小笨魚  
本篇文章主要對Java中的設計模式如,創(chuàng)建型模式、結構型模式和行為型模式以及7大原則進行了歸納整理,需要的朋友可以參考下,希望能給你帶來幫助

設計模式要進行共性與可變性的分析,對共性進行抽象,同時對可變性進行封裝,沒有完美的設計模式,作為一名開發(fā)者要懂得取舍,觸類旁通,開發(fā)出高內聚、低耦合、靈活性更高的軟件產(chǎn)品

1.開閉原則(軟件設計第一原則) 

定義:一個軟件實體應該對擴展開放,對修改關閉,即在不修改源代碼的基礎上擴展軟件功能

本質思想:

  • 以抽象來固定不變的東西(把固定不變的抽出來)
  • 使用具體實現(xiàn)對可變性進行封裝/隱藏
  • 面向抽象編程

2.依賴倒置原則

開閉原則是目標,依賴倒置是手段

三層含義:

  • 高層模塊不應該依賴于低層模塊,兩者都應該依賴其抽象(例如一個類的成員變量、方法的入?yún)?、返回值不應該是一個具體類,而最好是一個抽象類)
  • 抽象不應該依賴細節(jié)(業(yè)務代碼不關心具體類)
  • 細節(jié)應該依賴抽象(業(yè)務代碼只關心抽象類)

依賴倒置原則的核心就是面向抽象(抽象類或者接口)編程

3.里氏替換原則

定義:在一個軟件產(chǎn)品中,父類對象可以出現(xiàn)的地方,都可以替換成它的子類對象,且不能發(fā)生錯誤和異常,里氏替換原則為良好的繼承定義了規(guī)范

四層含義:

  • 子類必須完全實現(xiàn)父類的抽象方法,但不能覆蓋(重寫)父類的非抽象方法
  • 子類可以增加自己特有的方法
  • 當子類一定要重寫父類的方法時,子類方法的形參(前置條件)要比父類更寬松(例如父類使用HashMap,子類使用Map)
  • 當子類實現(xiàn)父類的抽象方法時,方法的返回值(后置條件)要比父類更加嚴格

總結:子類可以擴展父類的功能,但是不能去改變父類原有的功能(遵循父類原有的基礎特性,進行一系列的行為變化)

4.合成復用原則

定義:在軟件復用時,要盡量使用組合/聚合(has a)等關聯(lián)關系來實現(xiàn),即組合/聚合優(yōu)先于繼承

如果要使用繼承關系,則必須嚴格遵循里氏替換原則

合成復用原則和里氏替換原則是相輔相成的,兩者都是開閉原則的具體實現(xiàn)規(guī)范

設計模式用繼承對行為變化進行分類,而不是使用繼承來復用邏輯

  • 繼承破壞了類的封裝性,父類的實現(xiàn)細節(jié)全都暴露給子類了
  • 父類和子類的耦合性太高,父類的修改直接影響子類
  • 繼承是靜態(tài)的,與IOC動態(tài)注入相違背

5.接口隔離原則

定義:使用多個專門的接口,而不是使用單一的總接口;客戶端調用者代碼不應該依賴它不需要的接口

使用原則:

  • 根據(jù)接口隔離原則拆分接口時,首先必須滿足單一職責原則
  • 提高高內聚(每個接口都只負責相互獨立的部分,方法間都是強相關的)
  • 定制服務
  • 接口設計要有限度(不要讓類過于膨脹)

目標:在發(fā)生代碼變更,接口變更的情況下,盡量做到影響程度最低

6.迪米特法則

  • 規(guī)則:一個類應該盡量少的對其他類相互作用(依賴/調用)
  • 解釋:只與直接朋友(私有成員變量、方法入?yún)ⅰew的對象)進行通信,間接朋友:調用直接朋友的方法獲取到的對象
  • 目的:讓類之間解耦,提高類的復用性,當其他類發(fā)生變更的時候,對這個類的影響才最小
  • 缺點:過于嚴格的遵守此原則,會導致系統(tǒng)產(chǎn)生大量透明的小方法,需要在朋友數(shù)量和小方法之間進行權衡

通過下面的例子加深理解,Person類想調用Stranger類執(zhí)行一些邏輯

public class Person {
    private Friend friend = null;
    // 遵循迪米特法則
    // 將Stranger類封裝/隱藏了,Person類不知道Stranger類的存在
    // 但是Friend類產(chǎn)生了callStrangerDoSomething這個透明的小方法
    public void right(){
        friend.callStrangerDoSomething();
    }
    // 不遵循迪米特法則
    // 與Stranger類耦合了
    public void wrong(){
        Stranger stranger = friend.getStranger();
        stranger.doSomething();
    }
}

7.單一職責原則

  • 單一職責原則要求一個接口或類只有一個原因引起變化(職責的范圍因人而異)
  • 一個接口或一個類只負責一件明確的事,負責的事情越少越好
  • 如果其他類依賴了一個包含多個職責的類,也會將不需要的職責包含進來,也違反了迪米特法則

到此這篇關于Java設計模式中的七大原則詳細講解的文章就介紹到這了,更多相關Java設計模式原則內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解SpringBoot依賴注入和使用配置文件

    詳解SpringBoot依賴注入和使用配置文件

    這篇文章主要介紹了SpringBoot依賴注入和使用配置文件的相關知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • java實現(xiàn)馬踏棋盤游戲

    java實現(xiàn)馬踏棋盤游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)馬踏棋盤游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • IDEA中已配置阿里鏡像但maven無法下載jar包的問題及解決方法

    IDEA中已配置阿里鏡像但maven無法下載jar包的問題及解決方法

    這篇文章主要介紹了IDEA中已配置阿里鏡像但maven無法下載jar包的問題,本文給大家分享解決方法,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • springboot引入druid解析sql的過程

    springboot引入druid解析sql的過程

    在開發(fā)中,有時我們可能會需要獲取SQL中的表名,那么因為不同的數(shù)據(jù)源類型SQL會存在部分差異,那么我們就可以使用alibaba 的druid包實現(xiàn)不同的數(shù)據(jù)源類型的sql解析,需要的朋友可以參考下
    2023-08-08
  • java+selenium實現(xiàn)滑塊驗證

    java+selenium實現(xiàn)滑塊驗證

    現(xiàn)在越來越多的網(wǎng)站都使用采用滑塊驗證來作為驗證機制,用于判斷用戶是否為人類而不是機器人,本文就將利用java和selenium實現(xiàn)滑塊驗證,希望對大家有所幫助
    2023-12-12
  • Spring bean的實例化和IOC依賴注入詳解

    Spring bean的實例化和IOC依賴注入詳解

    這篇文章主要介紹了Spring bean的實例化和IOC依賴注入詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Springcloud RestTemplate服務調用代碼實例

    Springcloud RestTemplate服務調用代碼實例

    這篇文章主要介紹了Springcloud RestTemplate服務調用代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot項目整合達夢數(shù)據(jù)庫詳解(MYSQL轉換達夢數(shù)據(jù)庫)

    SpringBoot項目整合達夢數(shù)據(jù)庫詳解(MYSQL轉換達夢數(shù)據(jù)庫)

    這篇文章主要為大家詳細介紹了MYSQL轉換達夢數(shù)據(jù)庫以及SpringBoot項目整合達夢數(shù)據(jù)庫的相關教程,文中的示例代碼講解詳細,需要的可以參考下
    2025-03-03
  • Java_Spring之XML?的?AOP?配置

    Java_Spring之XML?的?AOP?配置

    這篇文章主要介紹了Java_Spring中基于XML的AOP配置,上篇講到的是基于注解的AOP配置,對XML感興趣的同學可以參考閱讀本文
    2023-04-04
  • java模仿windows計算器示例

    java模仿windows計算器示例

    這篇文章主要介紹了java模仿windows計算器示例,需要的朋友可以參考下
    2014-05-05

最新評論

滦南县| 全椒县| 罗田县| 彭阳县| 德清县| 邵武市| 台山市| 清流县| 辉县市| 商都县| 天水市| 华宁县| 德保县| 鹤岗市| 沁源县| 永州市| 阜宁县| 江达县| 启东市| 黄大仙区| 黄平县| 商水县| 堆龙德庆县| 丽江市| 宁城县| 桐庐县| 周口市| 石屏县| 定日县| 安泽县| 集安市| 新蔡县| 枣庄市| 永川市| 汾阳市| 沾化县| 平顶山市| 博罗县| 梁平县| 五指山市| 江门市|