設計模式簡介
阿新 • • 發佈:2020-08-19
一、 理解面向物件程式設計
物件:
1.開發的應用程式內的實體
2.實體直接可以通過互動來解決現實世界的問題
例: Person是實體,而Car也是實體。Person可以駕駛Car從一個地方到另一個地方
類:類可以幫助開發人員表示現實世界中的實體
1.類可以定義物件的屬性和行為。屬性是資料成員,行為由成員函式表示
2.類包含建構函式。這些函式的作用是為物件提供初始狀態
3.類就像模板一樣,非常易於重複使用
方法:
1.他們表示物件的行為
2.方法可以對屬性進行處理,從而實現所需的功能
二、面向物件程式設計的主要概念
1、封裝
1.物件的行為對於外部世界來說是不可見的,或者說物件的狀態資訊是私密的 2.客戶端不能通過直接操作來改變物件的內部狀態。想反,客戶端需要通過傳送訊息來請求物件改變其內部狀態 3.Python沒有提供封裝的關鍵字,當時在變數或函式字首加上__,可以將其訪問屬性變為私有
2、多型
多型有兩種型別:
1.物件根據輸入引數 提供方法的不同實現
2.不同型別的物件可以使用相同的介面
3、繼承
1.繼承表示一個類可以繼承父類的功能(大部分)
2.繼承被描述為一個重用基類中定義的功能並允許對原始軟體的實現進行獨立擴充套件的選項(父類重寫)
3.繼承可以利用不同的物件之間的關係建立層次結構,並且支援多從繼承(繼承多個基類)
4、抽象
1.它提供了一個簡單的客戶端介面,客戶端可以通過該介面與類的物件進行互動,並可以呼叫該介面中定義的各個方法
2.它將內部類的複雜性抽象為一個介面,這樣客戶端就不需要知道內部的細節進行抽象處理
5、組合
1.它是一種將物件或類合成更復雜的資料結構或軟體實現的方法 2.在組合中,一個物件可以呼叫其他模組中的成員函式,這樣無需通過繼承就可以實現基本功能的跨模組呼叫
三、面向物件的設計原則
1.開放/封閉原則
開放/封閉原則規定,類或物件及其方法對於擴充套件來說是開放的,但是對於修改是封閉的
簡單的說,在軟體開發的時候,一定確保以通用的方式來編寫類或模組,以便當需要的時候擴充套件類或物件行為時不必修改類本身。
優點如下:
1.現有的類不會被修改,因此退化的可能性較小
2.有助於保持以前程式碼的向後相容性
2.控制反轉原則
控制反轉原則是指高層級的模組不應該依賴於低層級的模組,他們都應該依賴於抽象
該原則建議任何兩個模組都不應以緊密的方式相互依賴
優點如下:
1.削弱了模組間的耦合,因此消除了系統中的複雜性/剛性 2.由於在依賴模組間有一個名稱的抽象層,因此便於通過更好的方式處理模組間的依賴關係
3.介面隔離原則
介面隔離原則規定,客戶端不應該依賴於他們不需要使用的介面
優點如下:
1.它強制開發人員編寫'瘦身型'介面,並使方法和介面緊密相關
2.防止向介面中隨意新增方法
4.單一職責原則
類的職責單一,引起類變化的原因單一
如果一個類實現了兩個功能,最好將他們分開,也就是說,功能才是改變的理由
優點如下:
1.每當一個功能傳送變化發生變化時,除了特定的類需要改變外,其他類無需改變
2.如果一個類有多種功能,那麼依賴他的類必定會由於多種原因發生,這種情況應該避免
5.替換原則
替換原則規定,派生類必須能夠完全替代基類
四、設計模式概念
1.設計模式主要特點
它們是語言無關的,可以用多種語言實現
它們是動態的,隨時會有新的模式引入
它們可以定製
2.設計模式優點
它們可以在多個專案中重複使用
問題可以在架構級別使用
它們都經過了時間的驗證
它們具有可靠性和依賴性
3.設計模式的分類
程式碼段:用某種語言編寫的一段具有特殊用途的程式碼
設計:用來解決某個特定問題的優秀解決方案
標準:這是一種解決某類問題的方法,同非常通用並且適用於當前的情況
模式:這是一個經過時間考驗的、高效、可擴充套件的方案,能夠解決一類已知問題
4.上下文--設計模式的實用性
參與者:它們是設計模式中用到的類,類可用在模式中扮演不同的角色,已完成多個目標
非功能需求:諸如記憶體優化、可用性和效能需求都屬於此型別。由於這些因素影響整個軟體解決方案,因此至關重要
權衡:並非所有的設計模式都適用程式開發
結果:如果上下文不合適,設計模式可能對程式碼產生負面影響,開發人員應當瞭解設計模式的結果和用途
5.模式的分類
建立型模式: #單例模式是建立型模式的一個例子
它們的執行機制基於物件的建立方式
它們將物件建立的細節隔離開來
程式碼所建立的物件與型別無關
這裡有6個具體的建立型模式可供研究,它們分別是:
簡單工廠模式(Simple Factory)
工廠方法模式(Factory Method)
抽象工廠模式(Abstract Factory)
建立者模式(Builder)
原型模式(Prototype)
單例模式(Singleton)
說明:嚴格來說,簡單工廠模式不是GoF總結出來的23種設計模式之一。
結構型模式 #介面卡模式是結構型模式的一個例子
致力於設計出能夠通過組合獲得強大功能的物件和類的結構
重點是簡化結構並識別類與物件之間的關係
主要關注類的繼承和組合
這裡有7個具體的結構型模式可供研究,它們分別是:
外觀模式(Facade)
介面卡模式(Adapter)
代理模式(Proxy)
裝飾模式(Decorator)
橋模式(Bridge)
組合模式(Composite)
享元模式(Flyweight)
行為型模式 #觀察者模式是行為模式的一個例子
關注物件之間的互動以及物件的響應性
物件應該能夠互動,同時仍然保持鬆散耦合
這裡有11個具體的行為型模式可供研究,它們分別是:
模板方法模式(Template Method)
觀察者模式(Observer)
狀態模式(State)
策略模式(Strategy)
職責鏈模式(Chain of Responsibility)
命令模式(Command)
訪問者模式(Visitor)
調停者模式(Mediator)
備忘錄模式(Memento)
迭代器模式(Iterator)
直譯器模式(Interpreter)