一、設(shè)計(jì)模式
1、什么是設(shè)計(jì)模式
設(shè)計(jì)模式是一套被反復(fù)使用、多數(shù)人知曉、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。
2、目的
設(shè)計(jì)模式的目的是為了讓軟件具有更好的代碼重用性、可讀性、可擴(kuò)展性、可靠性,同時(shí)使程序間出現(xiàn)高內(nèi)聚、低耦合的特性。
3、七大原則
(1)單一職責(zé)原則(Single-Responsibilitiy Principle(SRP))。 簡(jiǎn)單的說(shuō)就是 對(duì)于一個(gè)類A,其只負(fù)責(zé)某項(xiàng)職責(zé)(功能),并不是指一個(gè)類只有一個(gè)方法。 比如某個(gè)人,其兼職了幾個(gè)不同的工作,按照單一職責(zé)原則,每個(gè)工作應(yīng)該都由一個(gè)專門的人來(lái)完成。
(2)接口隔離原則(Interface Segregation Principle(ISR))。 簡(jiǎn)單的說(shuō)就是 對(duì)于一個(gè)類A,不應(yīng)該依賴于不需要的接口,即類間的依賴關(guān)系需建立在最小的接口上。 比如,一個(gè)接口里面有10個(gè)抽象方法,當(dāng)類A需要使用某個(gè)方法時(shí),需要實(shí)現(xiàn)該接口,并重寫10個(gè)方法。此時(shí)其余的9個(gè)方法,類A并不需要,按照接口隔離原則,可以將這個(gè)方法單獨(dú)的抽出來(lái)寫成一個(gè)接口B,然后讓類A去實(shí)現(xiàn)接口B,此時(shí)類A只需重寫一個(gè)方法即可。
(3)依賴倒置(倒轉(zhuǎn))原則(Dependence Inversion Principle(DIP))。 簡(jiǎn)單的講 依賴倒置原則的中心思想是面向接口編程,高層模塊不依賴與低層模塊,且二者均依賴于抽象,其抽象不依賴于細(xì)節(jié),應(yīng)該細(xì)節(jié)依賴于抽象。 其中: 抽象指的是 接口 或者 抽象類, 細(xì)節(jié)指的是 具體的實(shí)現(xiàn)類。
【舉例:普通的寫法】
class Teacher{
}
class Hospital{
// 高層依賴于低層
public void check(Teacher teacher){ // 采用具體的實(shí)現(xiàn)類,只能傳入Teacher類的實(shí)例
}
}
【舉例:面向接口編程】
interface Person{
}
class Teacher implements Person{
}
class Doctor implements Person{
}
class Hospital{
// 高層不依賴于低層,而依賴于抽象
public void check(Person person){ // 采用接口,方便復(fù)用,可以傳入Teacher類或Doctor類的實(shí)例
}
}
(4)里氏替換原則(Liskov Substitution Principle(LSP))。 簡(jiǎn)單的講就是 任何父類能出現(xiàn)的地方,子類一定能出現(xiàn),且子類可以擴(kuò)展父類的功能,但是不能改變父類原有的功能。即繼承時(shí)盡量不要重寫父類的方法。 比如一個(gè)父類A,子類B,且子類B重寫了父類A的某個(gè)方法,在一個(gè)類C中需要使用父類A的方法時(shí),若此時(shí)傳入的是子類B,則程序可能會(huì)出錯(cuò)。
(5)開閉原則(Open-Close Principle(OCP),核心原則)。 簡(jiǎn)單的講就是 軟件對(duì)擴(kuò)展開放(代碼提供方),對(duì)修改關(guān)閉(代碼使用方),即對(duì)代碼功能進(jìn)行擴(kuò)展時(shí),不能修改原有代碼。使用抽象類與接口對(duì)代碼進(jìn)行重構(gòu),當(dāng)擴(kuò)展代碼功能時(shí),實(shí)現(xiàn)抽象類或接口并實(shí)現(xiàn)相關(guān)方法即可。
(6)迪米特法則(Law of Demeter(LOD))。 又稱為最小知道法則(Least Knowledge Principle (LKP)) 簡(jiǎn)單的說(shuō)就是 一個(gè)實(shí)體應(yīng)盡量少的與其他實(shí)體之間發(fā)生相互作用(降低耦合),使系統(tǒng)功能模塊相互獨(dú)立。一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解,即不管你內(nèi)部有多復(fù)雜,我能調(diào)用你的方法就行。 比如:一個(gè)類A的某個(gè)方法中出現(xiàn)某個(gè)類B,且對(duì)類B做了一些無(wú)關(guān)類A的操作,按照迪米特法則,需要將這些操作封裝在類B的一個(gè)方法中,然后在類A中調(diào)用該方法。
(7)合成復(fù)用原則。 簡(jiǎn)單的說(shuō)就是 盡量使用合成或者聚合的方式,少用繼承。
4、常用設(shè)計(jì)模式分類(23種)
(1)三大類:
創(chuàng)建型模式(五種),
結(jié)構(gòu)型模式(七種),
行為型模式(十一種) (2)創(chuàng)建型模式:(強(qiáng)調(diào)對(duì)象創(chuàng)建時(shí),如何去更好的設(shè)計(jì)) 工廠模式,抽象工廠模式,單例模式,建造者模式,原型模式。
(3)結(jié)構(gòu)型模式:(設(shè)計(jì)更好的軟件結(jié)構(gòu)) 適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。
(4)行為型模式:(設(shè)計(jì)更好的方法調(diào)用模式) 策略模式,模板方法模式,觀察者模式,迭代器模式,責(zé)任鏈(職責(zé)鏈)模式,命令模式,備忘錄模式,狀態(tài)模式,訪問(wèn)者模式,中介者模式,解釋器模式。
二、UML圖
1、什么是UML圖
(1) Unified Modeling Language,統(tǒng)一建模語(yǔ)言,用來(lái)對(duì)軟件密集系統(tǒng)進(jìn)行可視化建模的一種語(yǔ)言。簡(jiǎn)單的說(shuō)就是 幫助軟件開發(fā)人員記錄、交流的一個(gè)圖形化語(yǔ)言。 (2)UML圖本身是一組符號(hào)的規(guī)定,用于描述軟件模型間各元素以及各元素間的聯(lián)系。
2、UML分類
(1)用例圖 (2)靜態(tài)結(jié)構(gòu)圖:類圖,對(duì)象圖,包圖,組件圖,部署圖。 (3)動(dòng)態(tài)行為圖:交互圖(時(shí)序圖、協(xié)作圖)、狀態(tài)圖、活動(dòng)圖。
3、類圖(常用)
(1)用于描述類與類之間的關(guān)系。UML的核心。 (2)元素:類、接口。 (3)關(guān)系:依賴、繼承(泛化)、實(shí)現(xiàn)、關(guān)聯(lián)、聚合、組合等。 (4)依賴: 若在某個(gè)類A中使用到類B,且若沒(méi)有類B,類A編譯會(huì)報(bào)錯(cuò),則稱A與B之間有依賴關(guān)系。 線條表示:虛線普通箭頭("<",">")。 (5)繼承(泛化): 屬于依賴關(guān)系的一種特例,如果類A繼承了類B,則稱A與B間存在泛化關(guān)系。 線條表示:實(shí)線空心三角箭頭。 (6)實(shí)現(xiàn): 屬于依賴關(guān)系的一種特例,如果類A實(shí)現(xiàn)了類B,則稱A與B間存在實(shí)現(xiàn)關(guān)系。 線條表示:虛線空心三角箭頭。 (7)關(guān)聯(lián): 屬于依賴關(guān)系的一種特例,如果類A與類B間有聯(lián)系。比如類B作為類A的成員變量,則稱A與B間存在關(guān)聯(lián)關(guān)系。 線條表示:實(shí)線(直線),普通箭頭("<",">")可選。如果強(qiáng)調(diào)方向,則加一個(gè)普通箭頭。否則只需要一條實(shí)線。 (8)聚合: 屬于關(guān)聯(lián)關(guān)系的一種特例,如果類A與類B間可以分離且可以獨(dú)立存在,則稱A與B間存在聚合關(guān)系。比如:人與衣服,可以分離,則為聚合關(guān)系。 線條表示:實(shí)線空心菱形箭頭。 (9)組合: 屬于關(guān)聯(lián)關(guān)系的一種特例,如果類A與類B間不可以分離,則稱A與B間存在組合關(guān)系。比如:人與人頭,不可分離,則為組合關(guān)系。 線條表示:實(shí)線實(shí)心菱形箭頭。
注: eclipse下生成Java類圖和時(shí)序圖,生成UML圖,參考地址: https://blog.csdn.net/qq_21383435/article/details/79890884

在線編輯UML圖的工具(ProcessOn):https://www./
|