大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 面向?qū)ο笤O(shè)計(jì)的原則概述

面向?qū)ο笤O(shè)計(jì)的原則概述

更新時(shí)間:2022-04-11 10:41:45 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1030次

面向?qū)ο?/span>設(shè)計(jì)的原則是什么?動(dòng)力節(jié)點(diǎn)小編來告訴你。

單一職責(zé)原則 (SRP)

SRP 要求一個(gè)類應(yīng)該只有一個(gè)職責(zé)。

示例:如果一個(gè)類SalesOrder 保存有關(guān)銷售訂單的信息,并且另外有一個(gè)saveOrder()將其保存SaleOrder 在數(shù)據(jù)庫中的方法和一個(gè)exportXML() 導(dǎo)出的方法,那么SalesOrder這種設(shè)計(jì)將違反 SRP,因?yàn)闀?huì)有不同類型的用戶類以及對(duì)此類進(jìn)行更改的不同原因。對(duì)一種類型的用戶進(jìn)行的更改,比如更改數(shù)據(jù)庫的類型,可能需要為其他類型的用戶重新測(cè)試、重新編譯和重新鏈接該類。

更好的設(shè)計(jì)是讓SalesOrder 類只保存有關(guān)銷售訂單的信息,并有不同的類分別保存訂單和導(dǎo)出訂單。這樣的設(shè)計(jì)將得到 SRP 的證實(shí)。

開閉原則 (OCP)

OCP 要求每個(gè)軟件實(shí)體應(yīng)該對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。

示例: 假設(shè)一個(gè)OrderValidation 類有一個(gè)方法validate(Order order)被編程為根據(jù)一組硬編碼規(guī)則驗(yàn)證訂單。這種設(shè)計(jì)違反了 OCP,因?yàn)槿绻?guī)則發(fā)生變化,則OrderValidation必須修改、測(cè)試和編譯類。

更好的設(shè)計(jì)是讓OrderValidation 類包含一個(gè)對(duì)象集合,ValidationRule 每個(gè)對(duì)象都有一個(gè)validate(Order order)方法(可能在Validation 接口中定義)來驗(yàn)證Order使用特定規(guī)則的方法,并且類的validate(Order order)方法OrderValidation 可以簡(jiǎn)單地遍歷這些ValidationRule對(duì)象以驗(yàn)證順序. 新設(shè)計(jì)將滿足 OCP,因?yàn)槿绻?guī)則發(fā)生變化,我們可以創(chuàng)建一個(gè)新ValidationRule 對(duì)象并在運(yùn)行時(shí)將其添加到OrderValidation實(shí)例中(而不是添加到類定義本身)。

這也可以通過使用AbstractValidationRule具有可覆蓋功能的基類的子類來實(shí)現(xiàn)validate(Order order)。子類可以在不改變基類功能的情況下以不同的方式實(shí)現(xiàn)該方法。

里氏替換原則 (LSP)

LSP 要求程序中的對(duì)象應(yīng)該可以用它們的子類的實(shí)例替換而不改變?cè)摮绦虻恼_性。

用戶必須能夠通過對(duì)基類的引用來使用子類的對(duì)象,而不會(huì)注意到任何區(qū)別。當(dāng)通過其基類接口使用對(duì)象時(shí),子類的對(duì)象不能期望用戶遵守比基類要求的更強(qiáng)大的先決條件。

示例:假設(shè)一個(gè)Rectangle 類有兩個(gè)實(shí)例變量height和width,以及一個(gè)方法,setSize(int a, int b)該方法設(shè)置height 為a和width。b假設(shè)Square是 的子類, 和為 來Rectangle 覆蓋繼承的方法。這種設(shè)計(jì)會(huì)違反 LSP。要看到這一點(diǎn),請(qǐng)考慮客戶端使用類型的引用變量調(diào)用 方法來分配不同的值和,然后立即驗(yàn)證是否正確設(shè)置了大小或正確計(jì)算了面積。如果變量引用heightwidthaRectanglesetSize()abRectangle對(duì)象而不是 Square對(duì)象。

事實(shí)證明,在 OO 編程中, aSquare 根本不是 a Rectangle,因?yàn)樗男袨榕c a 不同Rectangle。

接口隔離原則 (ISP)

ISP 要求客戶端不應(yīng)被迫依賴他們不使用的接口。

示例:假設(shè)圖中所示的 Vehicle 接口是為客戶設(shè)計(jì)的

這違反了 ISP,因?yàn)榭蛻舳吮黄纫蕾囉谒麄儾皇褂玫姆椒ǎ篐ighWay不使用stopRadio() or ejectCD(),并且ParkingLot不需要accelerate()or ejectCD()。

更好的設(shè)計(jì)是為不同類型的客戶端設(shè)計(jì)更小的接口,如下圖所示

依賴倒置原則(DIP)

DIP 要求高層模塊不應(yīng)該依賴于低層模塊,兩者都應(yīng)該依賴于Java抽象類。另外,抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。

示例:使一個(gè)類Button 與另一個(gè) Lamp(因?yàn)?aLamp 有 aButton)違反了 DIP。更好的設(shè)計(jì)是將 AbstractButton 與 AbstractButtonClient 相關(guān)聯(lián),并將 Button 定義為 AbstractButton 的子類,將 Lamp 定義為 AbstractButtonClient 的子類。

示例:EBookReader 使用classPDFBook是違反DIP的,因?yàn)樗枰腅BookReader class才能閱讀其他類型的電子書。一個(gè)更好的設(shè)計(jì)是讓EBookReader 使用一個(gè)接口EBook并讓PDFBook 其他類型的電子書類實(shí)現(xiàn)EBook。現(xiàn)在添加或更改電子書課程將不需要對(duì)EBookReader 課程進(jìn)行任何更改。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产精品毛片一区二区三区 | 国产精品蜜臀 | 亚洲精品久久片久久 | 九色综合久久综合欧美97 | 亚洲欧美日韩精品久久亚洲区 | 日韩精品综合 | 亚洲精品免费在线视频 | 国产在线观看91精品不卡 | 日本免费人做人一区在线观看 | 中文字幕永久视频 | 亚洲乱码视频在线观看 | 国产精品日本一区二区在线播放 | 久久国产亚洲 | 天天干天天干天天 | 成年人免费在线视频 | 极品女神西比尔久久精品 | 我要看一级毛片 | 久久成人精品 | 波多野结衣中文一区二区免费 | 我想看一级毛片 | 免费一区二区 | 久re这里只有精品最新地址 | 免费视频网站一级人爱视频 | 久久99热精品免费观看 | 伊人888| 久久精品国产清自在天天线 | 99久久精品免费看国产麻豆 | 精品福利 | 精品玖玖 | 一区二区中文字幕 | 97综合 | 九九久久视频 | 成人区精品一区二区不卡亚洲 | 久久久久久综合成人精品 | 天天操 夜夜操 | 爱爱免费视屏 | 久久国产香蕉一区精品 | 国产亚洲欧洲精品 | 97色伦影院| 蜜桃日本一道无卡不码高清 | 亚洲国产精品人久久 |