1 SOLID原則
Single responsibility principle 單一責任原則
改的只有一個小的部分,也適合單元測試
解析:單一責任原則指的是一個類只有一項工作,例如一個格式化數(shù)據(jù)打印的類,類中的成員函數(shù)可以有Json格式化輸出函數(shù),String格式化輸出函數(shù),List格式化輸出函數(shù)等等。這邊的單一責任就是指這個類的唯一工作就是格式化輸出數(shù)據(jù)。
第二種原則叫做O-Open Close Principle(開放封閉原則)
對擴展開放,對修改關(guān)閉
解析:抽象類不允許被直接創(chuàng)建對象,其他類的特性依舊存在。抽象類的實現(xiàn)應(yīng)在繼承該類的子類中去具體實現(xiàn)。抽象類中只負責定義該抽象方法。由于abstract 的方法需要在繼承后的子類中實現(xiàn),因此不可以 與final , private , static 共存。
L – Liskov substitution principle(里氏替換原則)和I – Interface segregation principle(接口分離原則)
機器人不能繼承人的類
類不能繼承不能實現(xiàn)的接口
解析1:SingleResponsibility 是為了解決后續(xù)維護中class過于臃腫的原則,InterfaceSegragation 是為了解決面向外部調(diào)用者讓其他開發(fā)人員更容易明白不同接口的功能區(qū)別而總結(jié)的原則。
解析2:假設(shè)現(xiàn)在我們有一個interface提供給用戶,但是里面有太多用戶不需要的功能,顯得我們的interface過于臃腫;那么這時候我們就要把這個大的接口根據(jù)功能再次細分,然后提供給不同的用戶。這就叫接口分離。
解析3:當父類的某些方法不確定時,可以用abstract關(guān)鍵字來修飾該方法[抽象方法],用abstract來修飾該類[抽象類],一個類中一旦有抽象方法,必須定義成抽象類。子類在繼承父類的時候一定要實現(xiàn)父類中的抽象方法,并且會自動繼承除構(gòu)造函數(shù)以外的Public和Protect方法,子類可以重寫這些方法。此外,子類也可以自定義自身的方法。
最后一個原則是D–Dependency inversion principle(依賴反轉(zhuǎn)原則)
抽象不應(yīng)該依賴于具體實現(xiàn),具體實現(xiàn)應(yīng)該依賴于抽象,因為如果如果具體實現(xiàn)沒了,你依賴它就會報錯
2 例題和5C解題法

- Clarify
what (提問關(guān)鍵字):
關(guān)鍵1:Elevator
有沒有承重不一樣
會不會分客梯和貨梯
關(guān)鍵2:Building
是否有多處能搭乘的電梯
how(針對規(guī)則來提問)
判斷是否電梯超重
按下按鈕,哪一臺電梯會響應(yīng)
電梯運行的時候能否按下反向的樓層 - Core Object
以一個Object為基礎(chǔ),線性的把流程需要的Object寫出來,比如 Request -> ElevatorSystem -> Elevator -> ElevatorButton
確定Objects之間的關(guān)系,比如一對多,或者多對一 - UML類圖符號
解析:在UML類圖當中,每個方法和屬性都會用前綴修飾符來表示其訪問級別。若沒有前綴修飾符則代表此方法或?qū)傩詫儆赑ackage內(nèi)都可訪問,在不同Package內(nèi)不能直接訪問。若有修飾符:'+'表示Public,代表此方法或?qū)傩怨_,能在任何地方都能直接訪問;'-'表示Private,代表此方法或?qū)傩运接?,只能通過類內(nèi)部訪問;'#'表示Protected,代表此方法或?qū)傩詾楸Wo,在同一個Package內(nèi)可以訪問,在另一個Package內(nèi)需要通過子類繼承才能進行訪問。 -
Cases
利用之前定義的CoreObject,列舉每個Object對應(yīng)產(chǎn)生的use case,如:
-
Class
如:
Use cases,對于use case更加詳細地描述這個use case在做什么視頻,針對這個描述去已有的Core Object填充進所需要的信息
解析: 使用ENUM相當于提前定義了一個類只能從一組值當中選擇,比如定義一個ENUM COLOR,可選的值為 RED, YELLOW, BLUE. 這樣的方法和使用String / Integer 做為值相比使得代碼的可讀性大大提升;同時這樣的ENUM告訴編譯器傳遞進來的值只能從紅黃藍三色當中選取,避免錯誤;同樣這個定義過的ENUM可以在任何地方被使用。但ENUM從運行速度上來說和其他做法并沒有太大區(qū)別。
使用異常處理來處理特殊的情況。 - Strategy Design Pattern
把策略變?yōu)閕nterface,符合依賴翻轉(zhuǎn)原則
解析:當一個類只做一件事情的時候,它通常會有更少的函數(shù)/變量/接口, 使得這個類更容易被理解;同樣,由于這個類只負責一件事,這個類的變化不容易影響到其他的類,使得代碼更易維護,也更容易被其他需要相同功能的地方復用;至于高耦合 (Tighter Coupling),這其實是在設(shè)計當中我們避免出現(xiàn)的事情,它指的是類和類之間有很緊密的關(guān)聯(lián),所以SRP其實引導向的是一種好的設(shè)計模式,也就是高內(nèi)聚,低耦合 (High Cohesion, Loose Coupling)。

