欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計(jì)模式中的七大原則詳細(xì)講解

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

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

1.開閉原則(軟件設(shè)計(jì)第一原則) 

定義:一個(gè)軟件實(shí)體應(yīng)該對擴(kuò)展開放,對修改關(guān)閉,即在不修改源代碼的基礎(chǔ)上擴(kuò)展軟件功能

本質(zhì)思想:

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

2.依賴倒置原則

開閉原則是目標(biāo),依賴倒置是手段

三層含義:

  • 高層模塊不應(yīng)該依賴于低層模塊,兩者都應(yīng)該依賴其抽象(例如一個(gè)類的成員變量、方法的入?yún)ⅰ⒎祷刂挡粦?yīng)該是一個(gè)具體類,而最好是一個(gè)抽象類)
  • 抽象不應(yīng)該依賴細(xì)節(jié)(業(yè)務(wù)代碼不關(guān)心具體類)
  • 細(xì)節(jié)應(yīng)該依賴抽象(業(yè)務(wù)代碼只關(guān)心抽象類)

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

3.里氏替換原則

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

四層含義:

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

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

4.合成復(fù)用原則

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

如果要使用繼承關(guān)系,則必須嚴(yán)格遵循里氏替換原則

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

設(shè)計(jì)模式用繼承對行為變化進(jìn)行分類,而不是使用繼承來復(fù)用邏輯

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

5.接口隔離原則

定義:使用多個(gè)專門的接口,而不是使用單一的總接口;客戶端調(diào)用者代碼不應(yīng)該依賴它不需要的接口

使用原則:

  • 根據(jù)接口隔離原則拆分接口時(shí),首先必須滿足單一職責(zé)原則
  • 提高高內(nèi)聚(每個(gè)接口都只負(fù)責(zé)相互獨(dú)立的部分,方法間都是強(qiáng)相關(guān)的)
  • 定制服務(wù)
  • 接口設(shè)計(jì)要有限度(不要讓類過于膨脹)

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

6.迪米特法則

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

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

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

7.單一職責(zé)原則

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

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

相關(guān)文章

  • Spring中使用copyProperties方法進(jìn)行對象之間的屬性賦值詳解

    Spring中使用copyProperties方法進(jìn)行對象之間的屬性賦值詳解

    這篇文章主要介紹了Spring中使用copyProperties方法進(jìn)行對象之間的屬性賦值詳解,使用org.springframework.beans.BeanUtils.copyProperties方法進(jìn)行對象之間屬性的賦值,避免通過get、set方法一個(gè)一個(gè)屬性的賦值,需要的朋友可以參考下
    2023-12-12
  • SpringBoot中RabbitMQ集群的搭建詳解

    SpringBoot中RabbitMQ集群的搭建詳解

    單個(gè)的?RabbitMQ?肯定無法實(shí)現(xiàn)高可用,要想高可用,還得上集群。這篇文章主要介紹了SpringBoot中RabbitMQ集群的兩種模式的搭建:普通集群搭建和鏡像集群搭建,需要的朋友可以參考一下
    2021-12-12
  • JDK SPI機(jī)制以及自定義SPI類加載問題

    JDK SPI機(jī)制以及自定義SPI類加載問題

    這篇文章主要介紹了JDK SPI機(jī)制以及自定義SPI類加載問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java實(shí)現(xiàn)銀行ATM管理系統(tǒng)

    java實(shí)現(xiàn)銀行ATM管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)銀行ATM管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • spring注解@Service注解的使用解析

    spring注解@Service注解的使用解析

    這篇文章主要介紹了spring注解@Service注解的使用解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • mybatis-plus數(shù)據(jù)權(quán)限實(shí)現(xiàn)代碼

    mybatis-plus數(shù)據(jù)權(quán)限實(shí)現(xiàn)代碼

    這篇文章主要介紹了mybatis-plus數(shù)據(jù)權(quán)限實(shí)現(xiàn),結(jié)合了mybatis-plus的插件方式,做出了自己的注解方式的數(shù)據(jù)權(quán)限,雖然可能存在一部分的局限性,但很好的解決了我們自己去解析SQL的功能,需要的朋友可以參考下
    2023-06-06
  • Spring開發(fā)核心之AOP的實(shí)現(xiàn)與切入點(diǎn)持久化

    Spring開發(fā)核心之AOP的實(shí)現(xiàn)與切入點(diǎn)持久化

    面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用“類”和 “對象”來實(shí)現(xiàn),所以,面向?qū)ο缶幊唐鋵?shí)就是對 “類”和“對象” 的使用,面向切面編程,簡單的說,就是動態(tài)地將代碼切入到類的指定方法、指定位置上的編程思想就是面向切面的編程
    2022-10-10
  • Lombok中@Builder和@SuperBuilder注解的用法案例

    Lombok中@Builder和@SuperBuilder注解的用法案例

    @Builder?是?lombok?中的注解,可以使用builder()構(gòu)造的Person.PersonBuilder對象進(jìn)行鏈?zhǔn)秸{(diào)用,給所有屬性依次賦值,這篇文章主要介紹了Lombok中@Builder和@SuperBuilder注解的用法,需要的朋友可以參考下
    2023-01-01
  • 簡單講解在Java編程中實(shí)現(xiàn)設(shè)計(jì)模式中的單例模式結(jié)構(gòu)

    簡單講解在Java編程中實(shí)現(xiàn)設(shè)計(jì)模式中的單例模式結(jié)構(gòu)

    這篇文章主要介紹了簡單講解在Java編程中實(shí)現(xiàn)設(shè)計(jì)模式中的單例模式結(jié)構(gòu),設(shè)計(jì)模式是最基本直白簡單的一種設(shè)計(jì)模式,需要的朋友可以參考下
    2016-04-04
  • 利用Java實(shí)現(xiàn)文件鎖定功能

    利用Java實(shí)現(xiàn)文件鎖定功能

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)文件鎖定功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08

最新評論