設(shè)計模式-單一職責(zé)原則
單一職責(zé)原則使用的是創(chuàng)建型模式
創(chuàng)建型模式
創(chuàng)建型模式對類進行抽象
重點,創(chuàng)建型模式能夠?qū)ο蟮膭?chuàng)建和和對象的使用分離碟狞。即使用創(chuàng)建型模式能夠使得對象的創(chuàng)建潦闲,對象的使用分離挤悉。重點在于分離泣刹。
什么是單一的職責(zé)原則
設(shè)計模式有六大基本原則辈讶,單一職責(zé)原則命浴,里氏替換原則,依賴倒置原則,接口隔離原則生闲,迪米特法則媳溺,開閉原則。
其中創(chuàng)建型模式符合單一職責(zé)原則碍讯。
單一職責(zé)原則
即SRP 用戶角色管理等模塊悬蔽,使用的是RBAC模型
RBAC 一種以角色為儲存的控制,使用RBAC 不賦予權(quán)限捉兴,賦予角色蝎困,例如windows的用戶管理,使用的是賦予角色倍啥,對用戶進行管理禾乘,這種方式為RBAC,目的在于使得用戶和權(quán)限分離逗栽。
設(shè)計一個用戶管理盖袭,依據(jù)單一職責(zé)模型,設(shè)計以下的結(jié)構(gòu)彼宠。
該結(jié)構(gòu)定義一些管理用戶的鳄虱,增加用戶的一些內(nèi)容,寫入一個接口中凭峡,然后進行實現(xiàn)拙已。
該接口具有以上的問題。
用戶的屬性(是否為注冊用戶摧冀,vip用戶等等)倍踪,用戶的行為(增加用戶,刪除用戶)沒有分開索昂。
該接口一團糟建车!
應(yīng)該用戶的信息,用戶的行為抽取為一個接口椒惨,然后一個接口繼承這兩個接口
更改的如下所示
why? 為什么要分離缤至,因為單一職責(zé)原則,當(dāng)使用單一職責(zé)原則的時候康谆,每個接口领斥,每個類需要承擔(dān)單一的職責(zé),不應(yīng)該承擔(dān)過多的原則沃暗,易于維護
核心 月洛,一個接口只有一個原則!一個接口只能負責(zé)一件事情孽锥,只有一個原因能引起其變化
實現(xiàn)一個電話的接口
這個接口包含兩個職責(zé)嚼黔,協(xié)議管理和數(shù)據(jù)傳送细层。
dial和chat為通話,該通話和撥打電話唬涧,使用了同時都和協(xié)議有關(guān)系今艺,如果要更改協(xié)議,那么這兩個接口的內(nèi)容都需要進行更改爵卒。由于一個接口存在兩個職責(zé),所以該接口需要劃分為兩個接口
此時存在一個關(guān)聯(lián)關(guān)系撵彻,撥打電話和協(xié)議的實現(xiàn)钓株,兩者之間存在關(guān)聯(lián)關(guān)系,此關(guān)聯(lián)關(guān)系為靜態(tài)關(guān)聯(lián)
這個類圖完全符合單一職責(zé)的原則陌僵。每個狀態(tài)只決定一件事情轴合。每個狀態(tài)的更改只改變一件事情。
好處 復(fù)雜度降低 可讀性提高 可維護性增強 變更引起的風(fēng)險降低(因為變更的時候如果每個接口只負責(zé)一個單一的原則碗短,那么一個接口的修改對其他沒有影響受葛,這樣降低了整體的復(fù)雜度)
單一原則適用于方法
刀就是刀,叉就是叉偎谁,1就是1,0就是0.沒有中間態(tài)总滩,每個方法也同樣的適用于單一原則,每個方法也同樣的只承擔(dān)一個內(nèi)容巡雨。一個作用闰渔。
總結(jié)
This is sometimes hard to see
這個有時候很難說!
對接口盡量做到單一原則铐望,類的做到引起一個原因引起的變化冈涧。