五月天无码视频在线_超碰免费公开视人人_黄片在线 在线播放_无套内谢丰满熟女

支持中心
服務(wù)體系
服務(wù)熱線
防偽查詢
知識(shí)中心Q&A
下載中心
聯(lián)系我們

了解更多詳細(xì)信息請(qǐng)致電

400-677-0389

或給我們留言

在線留言

設(shè)計(jì)模式之設(shè)計(jì)六大原則

作者: 點(diǎn)擊量: 2016-01-29 15:01:51
內(nèi)容導(dǎo)讀: 我們針對(duì)軟件管理開發(fā)出軟件公司管理系統(tǒng),針對(duì)性的幫助公司解決各方面管理問題。依托一整套成熟的服務(wù)體制和工作流程為客戶提供高質(zhì)量的軟件系統(tǒng)顧問咨詢、實(shí)施和售后等一系列優(yōu)質(zhì)、快速、便捷的服務(wù),詳情咨詢:400-677-0389

1. 單一職責(zé)原則(SRP)
定義:就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因。
從這句定義我們很難理解它的含義,通俗講就是我們不要讓一個(gè)類承擔(dān)過多的職責(zé)。如果一個(gè)類承擔(dān)的職責(zé)過多,就等于把這些職責(zé)耦合在一起,一個(gè)職責(zé)的變化可能會(huì)削弱或者抑制這個(gè)類完成其他職責(zé)的能力。這種耦合會(huì)導(dǎo)致脆弱的設(shè)計(jì),當(dāng)變化發(fā)生時(shí),設(shè)計(jì)會(huì)遭受到破壞。

比如我經(jīng)??吹揭恍?a href="http://www.hzbswxds.com/knowledge/androidxtappkf.html">Android開發(fā)在Activity中寫B(tài)ean文件,網(wǎng)絡(luò)數(shù)據(jù)處理,如果有列表的話Adapter 也寫在Activity中,問他們?yōu)槭裁闯撕谜乙矝]啥理由了,把他們拆分到其他類豈不是更好找,如果Activity過于臃腫行數(shù)過多,顯然不是好事,如果我們要修改Bean文件,網(wǎng)絡(luò)處理和Adapter都需要上這個(gè)Activity來(lái)修改,就會(huì)導(dǎo)致引起這個(gè)Activity變化的原因太多,我們?cè)诎姹揪S護(hù)時(shí)也會(huì)比較頭疼。也就嚴(yán)重違背了定義“就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因”。
當(dāng)然如果想爭(zhēng)論的話,這個(gè)模式是可以引起很多爭(zhēng)論的,但請(qǐng)記住一點(diǎn),你寫代碼不只是為了你也是為了其他人。

2. 開放封閉原則(ASD)
定義:類、模塊、函數(shù)等等等應(yīng)該是可以拓展的,但是不可修改。
開放封閉有兩個(gè)含義,一個(gè)是對(duì)于拓展是開放的,另一個(gè)是對(duì)于修改是封閉的。對(duì)于開發(fā)來(lái)說需求肯定是要變化的,但是新需求一來(lái),我們就要把類重新改一遍這顯然是令人頭疼的,所以我們?cè)O(shè)計(jì)程序時(shí)面對(duì)需求的改變要盡可能的保證相對(duì)的穩(wěn)定,盡量用新代碼實(shí)現(xiàn)拓展來(lái)修改需求,而不是通過修改原有的代碼來(lái)實(shí)現(xiàn)。

假設(shè)我們要實(shí)現(xiàn)一個(gè)列表,一開始只有查詢的功能,如果產(chǎn)品又要增加添加功能,過幾天又要增加刪除功能,大多數(shù)人的做法是寫個(gè)方法然后通過傳入不同的值來(lái)控制方法來(lái)實(shí)現(xiàn)不同的功能,但是如果又要新增功能我們還得修改我們的方法。用開發(fā)封閉原則解決就是增加一個(gè)抽象的功能類,讓增加和刪除和查詢的作為這個(gè)抽象功能類的子類,這樣如果我們?cè)偬砑庸δ?,你?huì)發(fā)現(xiàn)我們不需要修改原有的類,只需要添加一個(gè)功能類的子類實(shí)現(xiàn)功能類的方法就可以了。

3.里氏替換原則(LSP)
定義:所有引用基類(父類)的地方必須能透明地使用其子類的對(duì)象
里氏代換原則告訴我們,在軟件中將一個(gè)基類對(duì)象替換成它的子類對(duì)象,程序?qū)⒉粫?huì)產(chǎn)生任何錯(cuò)誤和異常,反過來(lái)則不成立,如果一個(gè)軟件實(shí)體使用的是一個(gè)子類對(duì)象的話,那么它不一定能夠使用基類對(duì)象。

里氏代換原則是實(shí)現(xiàn)開閉原則的重要方式之一,由于使用基類對(duì)象的地方都可以使用子類對(duì)象,因此在程序中盡量使用基類類型來(lái)對(duì)對(duì)象進(jìn)行定義,而在運(yùn)行時(shí)再確定其子類類型,用子類對(duì)象來(lái)替換父類對(duì)象。
在使用里氏代換原則時(shí)需要注意如下幾個(gè)問題:
子類的所有方法必須在父類中聲明,或子類必須實(shí)現(xiàn)父類中聲明的所有方法。根據(jù)里氏代換原則,為了保證系統(tǒng)的擴(kuò)展性,在程序中通常使用父類來(lái)進(jìn)行定義,如果一個(gè)方法只存在子類中,在父類中不提供相應(yīng)的聲明,則無(wú)法在以父類定義的對(duì)象中使用該方法。

我們?cè)谶\(yùn)用里氏代換原則時(shí),盡量把父類設(shè)計(jì)為抽象類或者接口,讓子類繼承父類或?qū)崿F(xiàn)父接口,并實(shí)現(xiàn)在父類中聲明的方法,運(yùn)行時(shí),子類實(shí)例替換父類實(shí)例,我們可以很方便地?cái)U(kuò)展系統(tǒng)的功能,同時(shí)無(wú)須修改原有子類的代碼,增加新的功能可以通過增加一個(gè)新的子類來(lái)實(shí)現(xiàn)。里氏代換原則是開閉原則的具體實(shí)現(xiàn)手段之一。
Java語(yǔ)言中,在編譯階段,Java編譯器會(huì)檢查一個(gè)程序是否符合里氏代換原則,這是一個(gè)與實(shí)現(xiàn)無(wú)關(guān)的、純語(yǔ)法意義上的檢查,但Java編譯器的檢查是有局限的。

4.依賴倒置原則(DIP)
定義:高層模塊不應(yīng)該依賴低層模塊,兩個(gè)都應(yīng)該依賴于抽象。抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。
在Java中,抽象就是指接口或者抽象類,兩者都是不能直接被實(shí)例化的;細(xì)節(jié)就是實(shí)現(xiàn)類,實(shí)現(xiàn)接口或者繼承抽象類而產(chǎn)生的就是細(xì)節(jié),也就是可以加上一個(gè)關(guān)鍵字new產(chǎn)生的對(duì)象。高層模塊就是調(diào)用端,低層模塊就是具體實(shí)現(xiàn)類。

依賴倒置原則在Java中的表現(xiàn)就是:模塊間通過抽象發(fā)生,實(shí)現(xiàn)類之間不發(fā)生直接依賴關(guān)系,其依賴關(guān)系是通過接口或者抽象類產(chǎn)生的。如果類與類直接依賴細(xì)節(jié),那么就會(huì)直接耦合,那么當(dāng)修改時(shí),就會(huì)同時(shí)修改依賴者代碼,這樣限制了可擴(kuò)展性。

5.迪米特原則(LOD)
定義:一個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少地與其他實(shí)體發(fā)生相互作用。
也稱為最少知識(shí)原則。如果一個(gè)系統(tǒng)符合迪米特法則,那么當(dāng)其中某一個(gè)模塊發(fā)生修改時(shí),就會(huì)盡量少地影響其他模塊,擴(kuò)展會(huì)相對(duì)容易,這是對(duì)軟件實(shí)體之間通信的限制,迪米特法則要求限制軟件實(shí)體之間通信的寬度和深度。迪米特法則可降低系統(tǒng)的耦合度,使類與類之間保持松散的耦合關(guān)系。

迪米特法則要求我們?cè)?a href="http://www.hzbswxds.com/knowledge/cpsysjsbz.html">設(shè)計(jì)系統(tǒng)時(shí),應(yīng)該盡量減少對(duì)象之間的交互,如果兩個(gè)對(duì)象之間不必彼此直接通信,那么這兩個(gè)對(duì)象就不應(yīng)當(dāng)發(fā)生任何直接的相互作用,如果其中的一個(gè)對(duì)象需要調(diào)用另一個(gè)對(duì)象的某一個(gè)方法的話,可以通過第三者轉(zhuǎn)發(fā)這個(gè)調(diào)用。簡(jiǎn)言之,就是通過引入一個(gè)合理的第三者來(lái)降低現(xiàn)有對(duì)象之間的耦合度。

在將迪米特法則運(yùn)用到系統(tǒng)設(shè)計(jì)中時(shí),要注意下面的幾點(diǎn):在類的劃分上,應(yīng)當(dāng)盡量創(chuàng)建松耦合的類,類之間的耦合度越低,就越有利于復(fù)用,一個(gè)處在松耦合中的類一旦被修改,不會(huì)對(duì)關(guān)聯(lián)的類造成太大波及;在類的結(jié)構(gòu)設(shè)計(jì)上,每一個(gè)類都應(yīng)當(dāng)盡量降低其成員變量和成員函數(shù)的訪問權(quán)限;在類的設(shè)計(jì)上,只要有可能,一個(gè)類型應(yīng)當(dāng)設(shè)計(jì)成不變類;在對(duì)其他類的引用上,一個(gè)對(duì)象對(duì)其他對(duì)象的引用應(yīng)當(dāng)降到最低。

6.接口隔離原則(ISP)
定義:一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上。
建立單一接口,不要建立龐大臃腫的接口,盡量細(xì)化接口,接口中的方法盡量少。也就是說,我們要為各個(gè)類建立專用的接口,而不要試圖去建立一個(gè)很龐大的接口供所有依賴它的類去調(diào)用。

采用接口隔離原則對(duì)接口進(jìn)行約束時(shí),要注意以下幾點(diǎn):
接口盡量小,但是要有限度。對(duì)接口進(jìn)行細(xì)化可以提高程序設(shè)計(jì)靈活性,但是如果過小,則會(huì)造成接口數(shù)量過多,使設(shè)計(jì)復(fù)雜化。所以一定要適度。
為依賴接口的類定制服務(wù),只暴露給調(diào)用的類它需要的方法,它不需要的方法則隱藏起來(lái)。只有專注地為一個(gè)模塊提供定制服務(wù),才能建立最小的依賴關(guān)系。

提高內(nèi)聚,減少對(duì)外交互。使接口用最少的方法去完成最多的事情。
這六個(gè)原則,可以使我們?cè)趹?yīng)用的迭代維護(hù)中更加方便、輕松的應(yīng)對(duì),讓我們的軟件更加靈活。在后續(xù)的文章中我會(huì)給大家介紹其他的設(shè)計(jì)模式



選購(gòu)指南:

本公司主要為山東地區(qū)的商業(yè)、企業(yè)單位及個(gè)人提供各類定制開發(fā)服務(wù),如:軟件定制開發(fā)、APP定制開發(fā)微信定制開發(fā)以及P5業(yè)務(wù)支撐平臺(tái)等整體的信息化解決方案,能夠滿足各種大中小型商業(yè)、企業(yè)及個(gè)人的需要。

如需了解本公司的詳細(xì)業(yè)務(wù)情況,敬請(qǐng)?jiān)L問本公司官方網(wǎng)站:http://www.hzbswxds.com

公司名稱:山東森普信息技術(shù)有限公司

公司地址:濟(jì)南市高新區(qū)齊魯軟件園C座3樓

公司網(wǎng)址:http://www.hzbswxds.com

業(yè)務(wù)QQ:176099777

聯(lián)系電話:400-677-0389

業(yè)務(wù)咨詢
咨詢?cè)诰€客服
合作加盟
咨詢?cè)诰€客服

我們的微信

我們的微博

點(diǎn)擊圖標(biāo)進(jìn)入幫助中心
我們的微信

掃描關(guān)注微信

我們的微博

掃描微博交流