黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

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

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

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

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

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

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

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

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

開(kāi)閉原則 (OCP)

OCP 要求每個(gè)軟件實(shí)體應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(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 接口中定義)來(lái)驗(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í)例中(而不是添加到類定義本身)。

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

里氏替換原則 (LSP)

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

用戶必須能夠通過(guò)對(duì)基類的引用來(lái)使用子類的對(duì)象,而不會(huì)注意到任何區(qū)別。當(dāng)通過(guò)其基類接口使用對(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是 的子類, 和為 來(lái)Rectangle 覆蓋繼承的方法。這種設(shè)計(jì)會(huì)違反 LSP。要看到這一點(diǎn),請(qǐng)考慮客戶端使用類型的引用變量調(diào)用 方法來(lái)分配不同的值和,然后立即驗(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才能閱讀其他類型的電子書(shū)。一個(gè)更好的設(shè)計(jì)是讓EBookReader 使用一個(gè)接口EBook并讓PDFBook 其他類型的電子書(shū)類實(shí)現(xiàn)EBook。現(xiàn)在添加或更改電子書(shū)課程將不需要對(duì)EBookReader 課程進(jìn)行任何更改。

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

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 色噜噜狠狠狠狠色综合久一 | 日日干日日摸 | 在线观看中文字幕一区 | 日韩经典在线观看 | 欧美一级片手机在线观看 | 欧美很很干| 一个人免费看的视频 | 91最新视频在线观看 | 国产精品高清免费网站 | 一级毛片特黄久久免费看 | 又黄又免费的视频 | 涩涩色中文综合亚洲 | 午夜剧院官方 | 国产欧美一区二区精品久久久 | 成人a大片高清在线观看 | 羞视频在线观看 | 2020精品极品国产色在线观看 | 伊人a.v在线 | 国产免费理论片在线观看 | 欧美专区日韩 | 午夜免费看 | 日韩一区二区免费看 | 怡春院综合 | 一 级 黄 色 片生活片 | 公又粗又长又大又深好爽日本 | 日韩视频在线观看一区二区 | free日韩性公交车上xxhd | va欧美 | 免费在线观看黄色小视频 | 老妇毛片 | 欧美国产日韩精品 | 在线观看黄色网 | 夜色私人影院永久入口 | 91桃色视频在线观看 | 亚洲美女综合 | 一级毛片毛片毛毛片毛片 | 丁香激情小说 | 日韩国产片 | 日日日射射射 | 亚洲日本在线播放 | 最新91 |