国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java 設(shè)計模式】設(shè)計原則之里氏替換原則

這篇具有很好參考價值的文章主要介紹了【Java 設(shè)計模式】設(shè)計原則之里氏替換原則。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


在軟件開發(fā)中,設(shè)計原則是創(chuàng)建靈活、可維護和可擴展軟件的基礎(chǔ)。
這些原則為我們提供了指導(dǎo)方針,幫助我們構(gòu)建高質(zhì)量、易理解的代碼。

?單一職責(zé)原則(SRP)
?開放/封閉原則(OCP)
?里氏替換原則(LSP)
?依賴倒置原則(DIP)
?接口隔離原則(ISP)
?合成/聚合復(fù)用原則(CARP)
?迪米特法則(LoD)

在面向?qū)ο笤O(shè)計中,里氏替換原則是一個重要的設(shè)計原則。它強調(diào)子類應(yīng)該能夠替換其父類并且仍然表現(xiàn)出良好的行為。通過遵循里氏替換原則,我們可以建立出更加靈活、可維護和可擴展的系統(tǒng)。在本文中,我們將深入研究里氏替換原則,了解其定義、背后的理念以及如何在實際開發(fā)中應(yīng)用。

1. 定義

里氏替換原則是由計算機科學(xué)家芭芭拉·利斯科夫(Barbara Liskov)于1987年提出的。該原則定義如下:如果對每一個類型為S的對象O1,都有類型為T的對象O2,使得以T定義的所有程序P在所有的對象o1都代換成o2時,程序P的行為沒有發(fā)生變化,那么類型S是類型T的子類型。

換句話說,里氏替換原則要求子類型必須能夠替換掉它們的父類型,而程序在使用父類型和子類型時不應(yīng)該產(chǎn)生意外的行為。

2. 好處

里氏替換原則有助于提高系統(tǒng)的靈活性、可維護性和可擴展性。以下是一些應(yīng)用里氏替換原則的好處:

  • 靈活性:

    通過能夠替換父類,子類更靈活地適應(yīng)變化,系統(tǒng)更容易擴展。

  • 可維護性:

    子類的替換不會影響到客戶端代碼,使得維護更容易。對父類的修改不應(yīng)該影響到子類的正確性。

  • 可擴展性:

    可以更方便地引入新的子類,而不影響系統(tǒng)的其他部分。

3. 應(yīng)用

在應(yīng)用里氏替換原則時,我們可以考慮以下幾個方面:

  • 子類必須保留父類的行為:

    子類在替換父類時,應(yīng)該保留父類的所有行為。如果子類重寫了父類的方法,應(yīng)該確保新的方法不影響原有的正確性。

  • 子類可以擴展父類的行為:

    子類可以通過增加新的方法或?qū)傩詠頂U展父類的行為,但不應(yīng)該覆蓋或修改父類的原有行為。

  • 不應(yīng)該拋出比父類更寬泛的異常:

    子類在重寫父類方法時,不應(yīng)該拋出比父類更寬泛的異常。這可能會破壞父類方法在客戶端代碼中的使用。

4. 示例

假設(shè)我們有一個 Shape 類表示圖形,其中有一個計算面積的方法。

Shape.java

package com.cheney.demo;

public class Shape {
    public double calculateArea() {
        return 0;
    }
}

現(xiàn)在我們有一個子類 Rectangle 表示矩形,按照里氏替換原則的要求,子類應(yīng)該保留父類的行為,并且可以進行擴展。

Rectangle.java

package com.cheney.demo;

public class Rectangle extends Shape {
    private double width;
    private double height;

    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    @Override
    public double calculateArea() {
        return width * height;
    }
}

在這個例子中,Rectangle 類繼承自 Shape 類并重寫了 calculateArea 方法。子類替換父類,并擴展了原有的行為,符合里氏替換原則的要求。

結(jié)語

里氏替換原則是面向?qū)ο笤O(shè)計中一個基本而重要的原則,它有助于創(chuàng)建靈活、可維護、可擴展的代碼。通過確保子類能夠替換掉父類并且表現(xiàn)出良好的行為,我們可以建立出更具彈性的系統(tǒng)。在實際項目中,開發(fā)人員應(yīng)該時刻關(guān)注子類與父類之間的關(guān)系,確保符合里氏替換原則,從而提高系統(tǒng)的質(zhì)量。


【Java 設(shè)計模式】系列 《23 種設(shè)計模式》 與 《7 大設(shè)計原則》 總綱
??設(shè)計原則
?單一職責(zé)原則(SRP) 規(guī)定一個類應(yīng)該只有一個引起變化的原因
?開放/封閉原則(OCP) 表明軟件實體應(yīng)該是可以擴展的,但是不可修改的
?里氏替換原則(LSP) 強調(diào)派生類必須能夠替代其基類而不引起程序錯誤
?依賴倒置原則(DIP) 倡導(dǎo)高層模塊不應(yīng)該依賴于低層模塊,二者都應(yīng)該依賴于抽象
?接口隔離原則(ISP) 提倡一個類不應(yīng)該被強迫依賴它不使用的接口
?合成/聚合復(fù)用原則(CARP) 建議盡量使用合成/聚合,盡量不要使用繼承
?迪米特法則(LoD) 規(guī)定一個對象應(yīng)該對其他對象有最少的了解

??創(chuàng)建型設(shè)計模式
?單例模式 保證一個類僅有一個實例,并提供一個訪問它的全局點
?工廠方法模式 定義一個用于創(chuàng)建對象的接口,但是由子類決定實例化哪一個類
?抽象工廠模式 提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類
?建造者模式 將一個復(fù)雜對象的構(gòu)建與其表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示
?原型模式 通過復(fù)制現(xiàn)有的對象來創(chuàng)建新對象,而不是從頭開始創(chuàng)建

??結(jié)構(gòu)型設(shè)計模式
?適配器模式 將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口
?橋接模式 將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化
?組合模式 將對象以樹形結(jié)構(gòu)組合以表示“部分-整體”的層次結(jié)構(gòu)
?裝飾器模式 動態(tài)地給一個對象添加一些額外的職責(zé)
?外觀模式 為子系統(tǒng)中的一組接口提供一個一致的界面
?代理模式 為其他對象提供一種代理以控制對這個對象的訪問
?享元模式 用共享的方式高效地支持大量小粒度對象

??行為型設(shè)計模式
?觀察者模式 定義對象間的一對多依賴,當一個對象改變狀態(tài),所有依賴者都會受到通知并自動更新
?策略模式 定義一系列算法,將它們封裝起來,并且使它們可以相互替換
?命令模式 將請求封裝成對象,使得可以用不同的請求對客戶進行參數(shù)化
?狀態(tài)模式 允許對象在其內(nèi)部狀態(tài)改變時改變它的行為
?責(zé)任鏈模式 為解除請求的發(fā)送者和接收者之間的耦合,而使多個對象都有機會處理這個請求
?訪問者模式 將算法與對象結(jié)構(gòu)分離,并且可以在不改變對象結(jié)構(gòu)的前提下定義新的操作
?中介者模式 用一個中介對象來封裝一系列的對象交互
?備忘錄模式 在不破壞封裝的情況下,捕獲對象的內(nèi)部狀態(tài),并在對象之外保存這個狀態(tài)
?迭代器模式 提供一種方法順序訪問一個聚合對象中的各個元素,而不暴露其內(nèi)部表示
?模版方法模式 定義一個操作中的算法的骨架,將一些步驟延遲到子類中
?解釋器模式 定義一個語言的文法,并且建立一個解釋器來解釋該語言中的句子

文章來源地址http://www.zghlxwxcb.cn/news/detail-806768.html

到了這里,關(guān)于【Java 設(shè)計模式】設(shè)計原則之里氏替換原則的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 設(shè)計模式:里氏代換原則(Liskov Substitution Principle,LSP)介紹

    里氏代換原則(Liskov Substitution Principle,LSP)是面向?qū)ο笤O(shè)計原則的一部分,它強調(diào) 子類對象應(yīng)該能夠替換其父類對象而不影響程序的正確性 。換句話說,子類對象應(yīng)該可以在不改變程序正確性的前提下替換掉父類對象。 該原則的實現(xiàn)原理可以通過以下幾點來說明: 子類必

    2024年04月29日
    瀏覽(15)
  • 設(shè)計原則學(xué)習(xí)之里氏替換原則

    以下內(nèi)容均來自抖音號【it楠老師教java】的設(shè)計模式課程。 1 、原理概述 子類對象(objectofsubtype/derivedclass)能夠替換程序(program)中父類對象(objectofbase/parentclass)出現(xiàn)的任何地方,并且保證原來程序的邏輯行為(behavior)不變及正確性不被破壞。 2、簡單的示例1 // 基類:

    2024年02月14日
    瀏覽(19)
  • 深入理解設(shè)計原則之里氏替換原則(LSP)【軟件架構(gòu)設(shè)計】

    深入理解設(shè)計原則之里氏替換原則(LSP)【軟件架構(gòu)設(shè)計】

    C++高性能優(yōu)化編程系列 深入理解軟件架構(gòu)設(shè)計系列 深入理解設(shè)計模式系列 高級C++并發(fā)線程編程 里氏替換原則(Liskov Substitution Principle, LSP)于1986年有Barbara Liskov提出,他當時是這樣描述這條原則的: 如果S是T的子類型,那么T的對象可以被S的對象所替換,并不影響代碼的運行

    2024年02月07日
    瀏覽(23)
  • 基于面向?qū)ο蠡A(chǔ)設(shè)計——里氏替換原則

    基于面向?qū)ο蠡A(chǔ)設(shè)計——里氏替換原則

    在Java中,支持抽象和多態(tài)的關(guān)鍵機制之一是繼承。正是使用了繼承,我們才可以創(chuàng)建實現(xiàn)父類中抽象方法的子類。那么,是什么規(guī)則在支配著這種特殊的繼承用法呢?最佳的繼承層次的特征又是什么呢?在什么情況下會使我們創(chuàng)建的類層次結(jié)構(gòu)掉進不符合開閉原則的陷阱中呢

    2024年02月14日
    瀏覽(25)
  • 【Java 設(shè)計模式】設(shè)計原則之開放封閉原則

    在軟件開發(fā)中,設(shè)計原則是創(chuàng)建靈活、可維護和可擴展軟件的基礎(chǔ)。 這些原則為我們提供了指導(dǎo)方針,幫助我們構(gòu)建高質(zhì)量、易理解的代碼。 ?單一職責(zé)原則(SRP) ?開放/封閉原則(OCP) ?里氏替換原則(LSP) ?依賴倒置原則(DIP) ?接口隔離原則(ISP) ?合成/聚合復(fù)

    2024年02月02日
    瀏覽(61)
  • 設(shè)計模式之7大設(shè)計原則-Java版

    軟件設(shè)計模式是前輩們代碼設(shè)計經(jīng)驗的總結(jié),可以反復(fù)使用。設(shè)計模式共分為3大類,創(chuàng)建者模式(5種)、結(jié)構(gòu)型模式(7種)、行為型模式(11種),一共23種設(shè)計模式,軟件設(shè)計一般需要滿足7大基本原則。下面通過5章的學(xué)習(xí)一起來看看設(shè)計模式的魅力吧。 目錄 1.1、設(shè)計模式概述

    2024年01月20日
    瀏覽(20)
  • Java設(shè)計模式_概述(設(shè)計模式類型和基本原則)

    設(shè)計模式(Design pattern)代表了最佳的實踐,是軟件開發(fā)人員在軟件開發(fā)過程中面臨一般問題的解決方案,是眾多軟件開發(fā)人員經(jīng)過相當長的一段時間的試驗和錯誤總結(jié)出來的。是優(yōu)秀程序猿的經(jīng)驗結(jié)晶。 但不推薦剛?cè)腴T的開發(fā)者學(xué)習(xí),哪怕把代碼搞的一塌糊涂,也要先將功

    2024年04月29日
    瀏覽(23)
  • (學(xué)習(xí)打卡2)重學(xué)Java設(shè)計模式之六大設(shè)計原則

    (學(xué)習(xí)打卡2)重學(xué)Java設(shè)計模式之六大設(shè)計原則

    ???前言:聽說有本很牛的關(guān)于Java設(shè)計模式的書——重學(xué)Java設(shè)計模式,然后買了(*^▽^*) 開始跟著小傅哥學(xué)Java設(shè)計模式吧,本文主要記錄筆者的學(xué)習(xí)筆記和心得。 打卡!打卡! 單一職責(zé)原則、開閉原則、里氏替換原則、迪米特法則、接口隔離原則、依賴倒置原則。 (引讀:

    2024年02月03日
    瀏覽(29)
  • 一網(wǎng)打盡java注解-克隆-面向?qū)ο笤O(shè)計原則-設(shè)計模式

    一網(wǎng)打盡java注解-克隆-面向?qū)ο笤O(shè)計原則-設(shè)計模式

    注解 :也叫標注,用于包、類、變量、方法、參數(shù)上。可以通過反射獲取標注。可以在編譯期間使用,也可以被編譯到字節(jié)碼文件中,運行時生效。 內(nèi)置注解 :Java語言已經(jīng)定義好的注解。 @Overread :用于方法重寫。 @Deprecated :標記過時方法。 @SuppressWarnings :指示編譯器去

    2024年02月11日
    瀏覽(19)
  • 里氏替換原則究竟如何理解?

    介 紹 里 氏 替 換 原 則 的 文 章 非 常 多 , 但 可 能 大 家 看 完 之 后 , 心 中 仍 然 留 有 疑 問 , 如 何 去 落 地 實 現(xiàn) , 如 何 判 斷 是 否 影 響 程 序 功 能 。 本 文 將 帶 領(lǐng) 大 家 深 入 理 解 里 氏 替 換 , 一 起 領(lǐng) 略 下 它 的 真 正 面 目 。 但 在 此 之 前 , 有 必

    2024年02月08日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包