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

專注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ù)文檔推薦 >>
主站蜘蛛池模板: 永久免费av网站 | 国产日韩精品视频一区二区三区 | 中文字幕一区二区三区视频在线 | 日日夜夜操美女 | 国产成人一区在线播放 | 日本高清xxxxx | 青青草欧美 | 中文字幕伦伦在线中文字 | 久久精品国产一区二区三区不卡 | 亚洲欧美一区二区三区在线播放 | 欧美日韩一区在线观看 | 涩涩涩丁香色婷五月网视色 | 一二三四社区在线视频社区 | 国产dvd毛片在线视频 | 国产片黄色 | 成人av在线播放 | 亚洲国产片在线观看 | 曰批免费视频播放免费观看网站 | 欧美三级久久 | 日韩经典欧美精品一区 | 最新一本大道香蕉综合 | 看全色黄大色黄大片免责看的 | 成人三级在线播放 | 波多一区 | 国产成人综合久久亚洲精品 | 久草视频在线资源 | 国产精品二区三区免费播放心 | www.黄免费 | 天天操天天舔天天干 | 成人网欧美亚洲影视图片 | 色黄视频网站 | 免费观看国产精品 | 国产精品入口麻豆免费观看 | 手机小视频在线观看 | 福利网址导航大全 | 看片午夜| 亚洲视屏在线 | 大片免费播放器 | 精品久久久久国产免费 | 国产成人精品高清在线观看99 | 亚洲欧美高清在线 |