1. 設計原則簡述
1.1 基本原則
(1)KISS(Keep It Simple Stupid)原則
KISS原則目的:在設計和編碼中,盡量保持代碼簡約,避免不必要的復雜。
(2)DRY(Don't Repeat Yourself)原則
DRY原則目的:抽取系統公共部分,放置在一個地方避免重復。
DRY原則適用:代碼、功能和業務邏輯設計,對系統分割,每個功能之間界限清晰,用例之間不交叉。
(3)Tell,Don't Ask原則
Tell,Don't Ask原則要求:與封裝有關,要求對代碼進行合理封裝,並放到合理的類中。
Tell,Don't Ask原則指出:明確對象要執行的操作,而不是先詢問對象狀態再決定執行操作。
(4)YAGNI(You Ain't Gonna Need It)原則
YAGNI原則指出:系統中只包含必需的功能,不包含認為將來可能用到的功能或特性,防止過度設計。
YAGNI原則應用:TDD。在TDD中,首先寫出系統必須功能的測試用例,再實現系統功能代碼,然后進行測試,直至測試代碼通過。
(5)SoC(Separation of Concerns)原則
SoC原則:把功能分離為單獨功能點,每個功能點有唯一的行為和數據,每個功能點均能被其他需要的類使用。
SoC原則最大限度實現代碼重用、功能重用、模塊重用。
1.2 S.O.L.I.D原則
Robert Martin提出的S.O.L.I.D 原則包括:單一職責原則(SRP)、開閉原則(OCP)、里氏替換原則(LSP)、接口隔離原則(ISP)、依賴倒置原則(DIP)。
第24章 單一職責原則(Single Responsibility Principle)
第25章 開閉原則(Open Close Principle)
第26章 里氏替換原則(Liskov Substitution Principle)
第27章 接口隔離原則(Interface Segregation Principle)
第28章 依賴倒置原則(Dependence Inversion Principle)
第29章 迪米特法則(Low Of Demeter)
2. 23種設計模式
設計模式簡介
2.1 創建型模式(Creational Patterns)
創建型模式:用來進行對象創建的的模式。
創建型模式目標:簡化對象的創建和方便對象的管理。
◊ 創建型模式(Creational Pattern)關注對象的創建過程
◊ 創建型模式對類的實例化過程進行抽象,將對象的創建和對象的使用分離,對用戶隱藏類的實例的創建細節。
◊ 創建型模式描述如何將對象的創建和使用分離,讓用戶在使用對象時無須關心對象的創建細節,從而降低系統的耦合度,讓設計方案更易於修改和擴展。
創建型模式關注點在於創建對象和使用對象,包括:
◊ 創建什么(What)
◊ 由誰創建(Who)
◊ 何時創建(When)
工廠模式主要用於創建獨立的、相互無關聯的大量對象;
抽象工廠模式用於成套對象的一次性創建;
建造者模式用於創建步驟文檔,但創建步驟中的元素易變的對象的創建;
單件模式用於創建必須唯一的實例;
原型模式用於創建大量相同或相似的對象。
第2章 建造者模式(Builder)
第4章 原型模式(Prototype)
第5章 單件模式(Singleton)
2.2 結構型模式(Structural Patterns)
結構型模式討論的是類和對象的結構,采用繼承機制來組合接口(類結構型模式)或者通過組合一些對象,從而實現新的功能(對象結構型模式)。
適配器模式是通過類的繼承或者對象的組合側重與轉換已有的接口;橋接模式是通過將抽象和實現分離,讓它們可以分別獨立地變化,它強調的是系統沿着多個方向的變化;裝飾模式采用對象組合而非繼承的手法,實現在運行時動態的擴展對象功能的能力,它強調的是擴展接口;組合模式模糊了簡單元素和復雜元素的概念,它強調的是一種層次式的結構;外觀模式將復雜系統的內部子系統與客戶程序之間的依賴解除,它側重於簡化接口,更多的是一種架構模式;享元模式解決由於存在大量的細粒度對象而造成不必要的內存開銷的問題,它與外觀模式恰好相反,關注的重點是細小的對象;代理模式為其他對象提供一種代理以控制對這個對象的訪問,它側重於增加間接層來簡化復雜的問題。
適配器模式和橋接模式具有一些共同的特征:他們都給另一對象提供了一定程度上的間接性,因而有利於系統的靈活性;它們都涉及從自身以外的一個接口向這個對象轉發請求。這兩種模式的不同之處主要在於它們各自的用途。適配器模式主要是為了解決兩個已有接口之間不匹配的問題,它不考慮這些接口是怎樣實現的;而另一方面,橋接模式則對抽象接口與它的實現部分進行橋接。雖然這一模式允許修改實現它的類,但仍然為用戶提供了一個穩定的接口。橋接模式也會在系統演化時適應新的實現。它們的區別在於:外觀Facade定義了一個新的接口,而適配器Adapter則復用了一個原有的接口。
裝飾模式和組合模式都基於遞歸組合來組織可變數目的對象,兩個模式的目的不同。裝飾旨在使你能夠不需要生成子類即可給對象添加職責。這樣避免了靜態實現所有功能組合,從而導致子類急劇增加。組合模式則由不同的目的,它旨在構造類,使多個相關的對象能夠以統一的方式處理,而多重對象可以被當作一個對象來處理。它重點不在修飾,而在表示。另一種與裝飾模式結構類似的模式是代理模式,這兩種模式都描述了怎樣為對象提供一定程度上的間接引用,Proxy和Decorator對象的實現部分都保留了指向另一個對象的指針,它們向這個對象發送請求。同樣它們具有不同的設計目的,代理模式構成一個對象並為用戶提供一致的接口,但代理模式不能動態添加或分離性質,它也不是為遞歸組合而設計的。它的目的是,當直接訪問一個實體不方便或不符合需要時,為這個實體提供一個替代者。
第6章 適配器模式(Adapter)
第7章 橋接模式(Bridge)
第8章 組合模式(Composite)
第9章 裝飾模式(Decorator)
第10章 外觀模式(Facade)
第11章 享元模式(Flyweight)
第12章 代理模式(Proxy)
2.3 行為型模式(Behavioral Patterns)
行為型設計模式及算法和對象之間職責的分配。行為型設計模式不僅僅描述對象或類的模式,還描述它們之間的通信模式。行為型設計模式使用對象復合而不是繼承。
第13章 職責鏈模式(Chain of Responsibility)
第14章 命令模式(Command)
第15章 解釋器模式(Interpreter)
第16章 迭代器模式(Iterator)
第17章 中介者模式(Mediator)
第18章 備忘錄模式(Memento)
第19章 觀察者模式(Oberver)
第20章 狀態模式(State)
第21章 策略模式(Strategy)
第23章 訪問者模式(Visitor)