設計模式及例子講解(todo)

2021-10-02 19:08:39 字數 1477 閱讀 8576

學習設計模式中一些簡單的筆記

為什麼要學習設計模式:我們學設計模式,是為了學習如何合理的組織我們的**,如何解耦,如何真正的達到對修改封閉對擴充套件開放的效果,而不是去背誦那些類的繼承模式,然後自己記不住,回過頭來就罵設計模式把你的**搞複雜了,要反設計模式。

設計模式的目的只有乙個:降低物件之間的耦合,增加程式的可復用性、可擴充套件性、可維護性。

為了合理的利用設計模式,我們應該明白乙個概念,叫做擴充套件點。擴充套件點不是天生就有的,而是設計出來的。我們設計乙個軟體的架構的時候,我們也要同時設計一下哪些地方以後可以改,哪些地方以後不能改。倘若你的設計不能滿足現實世界的需要,那你就要重構,把有用的擴充套件點加進去,把沒用的擴充套件點去除掉。這跟你用不用設計模式沒關係,跟你對具體的行業的理解有關係。

設計模式的例子:

開閉原則就是說對擴充套件開放,對修改關閉。在程式需要進行拓展的時候,不能去修改原有的**,而是要擴充套件原有**,實現乙個熱插拔的效果。所以一句話概括就是:為了使程式的擴充套件性好,易於維護和公升級。想要達到這樣的效果,我們需要使用介面和抽象類等,後面的具體設計中我們會提到這點。

不要存在多於乙個導致類變更的原因,也就是說每個類應該實現單一的職責,如若不然,就應該把類拆分。

黎克特制代換原則(liskov substitution principle lsp)物件導向設計的基本原則之一。 黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現。 lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。黎克特制代換原則是對「開-閉」原則的補充。實現「開-閉」原則的關鍵步驟就是抽象化。而基類與子類的繼承關係就是抽象化的具體實現,所以黎克特制代換原則是對實現抽象化的具體步驟的規範。—— from baidu 百科

歷史替換原則中,子類對父類的方法盡量不要重寫和過載。因為父類代表了定義好的結構,通過這個規範的介面與外界互動,子類不應該隨便破壞它。

這個是開閉原則的基礎,具體內容:面向介面程式設計,依賴於抽象而不依賴於具體。寫**時用到具體類時,不與具體類互動,而與具體類的上層接**互。

這個原則的意思是:每個介面中不存在子類用不到卻必須實現的方法,如果不然,就要將介面拆分。使用多個隔離的介面,比使用單個介面(多個介面方法集合到乙個的介面)要好。

就是說:乙個類對自己依賴的類知道的越少越好。也就是說無論被依賴的類多麼複雜,都應該將邏輯封裝在方法的內部,通過public方法提供給外部。這樣當被依賴的類變化時,才能最小的影響該類。

最少知道原則的另乙個表達方式是:只與直接的朋友通訊。類之間只要有耦合關係,就叫朋友關係。耦合分為依賴、關聯、聚合、組合等。我們稱出現為成員變數、方法引數、方法返回值中的類為直接朋友。區域性變數、臨時變數則不是直接的朋友。我們要求陌生的類不要作為區域性變數出現在類中。

原則是盡量首先使用合成/聚合的方式,而不是使用繼承。

設計模式的講解及使用

設計模式 design pattern 是一套被反覆使用 經過分類編目的 設計經驗的總結,使用設計模式是為了可重用 保證 可靠性 程式的重用性。1995 年,gof gang of four,四人組 合作出版了 設計模式 可復用物件導向軟體的基礎 一書,共收錄了 23 種設計模式。總體來說設計模式分...

android shape講解小全及例子

原文 例子 shape xmlns android android shape rectangle oval line ring 預設為rectangle corners shape rectangle 時使用,android radius integer 半徑,會被下邊的屬性覆蓋,預設為1dp,a...

KVC設計模式講解

在objective c語言中,可以用 property和 synthesize來建立例項變數的屬性,因此物件訪問的時候可以直接使用點語法。但是,如果不宣告屬性,如何訪問到物件的例項變數呢?kvc就解決了這一問題。kvc 全稱key value coding,也就是鍵值編碼。先看下面乙個例子 int...