寫在前面
一直想抽出一些時間來寫一寫博客护桦,最近準備重拾那份決心巧号,但是仔細思考了下卻不知何入手族奢。思來想去,覺得還是以設(shè)計模式為契機丹鸿,可以很好的對自己的學習進行相應的總結(jié)越走,接下來的文章中,會有參考其他資料的部分靠欢,在此提醒一下廊敌,請各位同學理解。
學習思路
參考哲學三大問題:
- 我是誰门怪?
- 我從哪里來骡澈?
- 我要到哪里去?
當然掷空,我們不會對各個設(shè)計模式問人類的問題肋殴,那么我們也帶著三個問題去學習設(shè)計模式及其他的知識點:
- 他是誰?
- 他能干什么坦弟?
- 他怎么使用护锤?
接下來關(guān)于設(shè)計模式的總結(jié),我將以這樣的思路進行相關(guān)的表述酿傍,除此之外烙懦,也會對一些內(nèi)容進行補充講解,如有疑問及異議赤炒,請于博客下留言氯析,我將與您共同探討,我相信討論會使兩個人都有收益的莺褒!
設(shè)計原則1: 單一職責原則SRP
1掩缓、SRP是誰?
單一職責原則遵岩,簡稱SRP(Single responsibility principle)拾因,從其中文含義,我們就可以理解其所要表達的思想:職責(也就是功能)單一旷余!
備注一下: 其出自 羅伯特·C·馬毒罴恰(Robert C. Martin)的《敏捷軟件開發(fā):原則、模式和實踐》一書正卧。
2蠢熄、SRP能干什么?
SRP所要表述的思想是職責單一炉旷,那么也就是說一個類(或方法)不需要負責太多的職責签孔,其只需要負責自己應該負責的某一職責即可叉讥!舉個通俗的例子,以軟件開發(fā)人員為例:后端軟件開發(fā)人員只需要負責功能需求的開發(fā)即可饥追,其不應該去進行UI和測試的工作(這里在現(xiàn)實中好像不可能)图仓。
從上述例子可以看出:在現(xiàn)實中,很少有完全符合SRP的情況但绕,包括在實際的軟件開發(fā)中救崔,如果某個類僅僅只負責一個職責,那似乎程序代碼是如此的不可想象捏顺。
在SRP的思想基礎(chǔ)上六孵,我們應該要考慮的點不能完全限定于SRP的理論,我們需要注意以下幾點:
- 1幅骄、在定義對象職責時劫窒,需要充分考慮職責與對象之間的關(guān)系;
- 2拆座、職責需要很好的體現(xiàn)出對象的行為方式
3主巍、SRP怎么使用?
3.1 不符合SRP的示例
來看下老師Teacher這個類挪凑,現(xiàn)在很多的高校老師一方面教書育人孕索,另一方面處理黨政事務,這其實是兩種行為岖赋,但是在本例中均為教師擔任,這是不符合SRP的原則的瓮孙。
package top.flygrk.ishare.srp;
/**
* @Classname: Teacher
* @Description: 不符合SRP原則的示例
* @Date: 2019/8/1 23:57
* @Created by: flygrk
*/
public class Teacher {
public void teachStudent() {
System.out.println("老師教學生知識~");
}
public void handlePartyAffairs() {
System.out.println("處理黨政事務~");
}
}
3.2 符合SRP原則的示例
以上述不符合SRP的原則的示例來修改唐断,使其符合SRP原則,其實這很簡單杭抠,在建立類別時脸甘,我們讓教師只負責教書育人這種行為,將處理黨政事務這種行為交由黨員類別即可偏灿。
- Teacher:
package top.flygrk.ishare.srp.accord;
/**
* @Classname: Teacher
* @Description: 符合SRP原則的示例
* @Date: 2019/8/2 0:08
* @Created by: flygrk
*/
public class Teacher {
public void teachStudent() {
System.out.println("老師教學生知識~");
}
}
- PartyMember:
package top.flygrk.ishare.srp.accord;
/**
* @Classname: PartyMember
* @Description: 符合SRP的示例
* @Date: 2019/8/2 0:09
* @Created by: flygrk
*/
public class PartyMember {
public void handlePartyAffairs() {
System.out.println("處理黨政事務~");
}
}
從上述示例也能看出丹诀,嚴格遵循單一職責原則SRP之后,各個類只負責單一的職責翁垂,類結(jié)構(gòu)清晰铆遭。但是也存在一定的弊端。下面我們來總結(jié)一下其優(yōu)缺點沿猜。
4枚荣、SRP的優(yōu)點
- 1、類的復雜性降低啼肩,實現(xiàn)什么職責都有清晰明確的含義橄妆;
- 2衙伶、可讀性提高
- 3、可維護性提高
- 4害碾、變更代碼引起的風險降低矢劲。如果接口的單一職責做的好,一個接口的修改只對相應的實現(xiàn)類有影響慌随,對其他接口沒有影響芬沉。
5、SRP的缺點
我們也可以認為其沒有較為明顯的缺點吧儒陨,在實際應用中花嘶,只是比較難以完全遵循SRP。
建議: 開發(fā)中蹦漠,接口開發(fā)必須遵循SRP原則椭员,類開發(fā)盡量遵循SRP原則。
補充點:
關(guān)于SRP的內(nèi)容基本上就總結(jié)完畢了笛园,關(guān)于SRP的知識點隘击,需要在實踐中進行體驗。下面補充一些知識點內(nèi)容:
- 違反SRP的設(shè)計模式: 外觀模式Facade研铆、代理模式Proxy