做项目开发你必须得掌握的知识:设计模式
什么是設計模式?
設計模式,其實就是對軟件設計過程中普遍存在、反復出現(xiàn)的各種問題,所提出的解決方案。
而所謂的軟件設計,是軟件工程方面的一個名詞,在現(xiàn)代的軟件開發(fā)過程中,并不是確定好了項目之后就立刻敲代碼,而是要先構思好整個項目的架構、模塊、流程。
如果是多人協(xié)作開發(fā),項目設計就變得更加重要,不然每個人都自己做自己的,必然會出現(xiàn)功能重復、代碼冗余、接口不匹配等問題,所以在開發(fā)前分好工,不同的組不同的人負責不同的模塊,這樣才能讓開發(fā)更加絲滑順暢。
在項目設計的過程中要非常細致,根據(jù)需求編寫相應的功能,再利用面向對象相關的知識,將功能細分到不同的類中
每一個設計模式系統(tǒng)地命名、解釋和評價了面向對象中一個重要的設計思路。
面向對象
面向對象的三大特性相信大家都已經很熟悉了:封裝、繼承、多態(tài)。
這三大特性的順序是固定的,它們三個并不是并列的關系,而是遞進的關系。
開放封閉原則:一個軟件實體如類、模塊和函數(shù)應該對擴展開放,對修改關閉。即軟件實體應盡量在不修改原有代碼的情況下進行擴展。
里氏替換原則:所有引用父類的地方必須能透明地使用其子類的對象。
依賴倒置原則:高層模塊不應該依賴低層模塊,二者都應該依賴其抽象;抽象不應該依賴細節(jié);細節(jié)應該依賴抽象。換言之,要針對接口編程,而不是針對實現(xiàn)編程。
接口隔離原則:使用多個專門的接口,而不使用單一的總接口,即客戶端不應該依賴那些它不需要的接口。
單一職責原則:不要存在多于一個導致類變更的原因。通俗的說,即一個類只負責一項職責。
創(chuàng)建型模式
簡單工廠模式
內容:不直接向客戶端暴露對象創(chuàng)建的實現(xiàn)細節(jié),而是通過一個工廠類來負責創(chuàng)建產品類的實例。
優(yōu)點:
隱藏了對象創(chuàng)建的實現(xiàn)細節(jié)
客戶端不需要修改代碼
缺點:
違反了單一職責原則,將創(chuàng)建邏輯幾種到一個工廠類里
當添加新產品時,需要修改工廠類代碼,違反了開閉原則
工廠方法模式
內容:定義一個用于創(chuàng)建對象的接口(工廠接口),讓子類決定實例化哪一個產品類。
優(yōu)點:
每個具體產品都對應一個具體工廠類,不需要修改工廠類代碼
隱藏了對象創(chuàng)建的實現(xiàn)細節(jié)
缺點:
每增加一個具體產品類,就必須增加一個相應的具體工廠類
抽象工廠模式
內容:定義一個工廠類接口,讓工廠子類來創(chuàng)建一系列相關或相互依賴的對象。
優(yōu)點:
將客戶端與類的具體實現(xiàn)相分離
每個工廠創(chuàng)建了一個完整的產品系列,使得易于交換產品系列
有利于產品的一致性(即產品之間的約束關系)
缺點:
難以支持新種類的(抽象)產品
建造者模式
內容:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示。
建造者模式與抽象工廠模式相似,也用來創(chuàng)建復雜對象。主要區(qū)別是建造者模式著重一步步構造一個復雜對象,而抽象工廠模式著重于多個系列的產品對象。
優(yōu)點:
隱藏了一個產品的內部結構和裝配過程
將構造代碼與表示代碼分開
可以對構造過程進行更精細的控制
單例模式
內容:保證一個類只有一個實例,并提供一個訪問它的全局訪問點。
優(yōu)點:
對唯一實例的受控訪問
單例相當于全局變量,但防止了命名空間被污染
創(chuàng)建型模式小結
抽象工廠模式和建造者模式相比于簡單工廠模式和工廠方法模式而言更靈活也更復雜。
通常情況下、設計以簡單工廠模式或工廠方法模式開始,當你發(fā)現(xiàn)設計需要更大的靈活性時,則像更復雜的設計模式演化。
結構型模式
適配器模式
內容:將一個類的接口轉換成客戶希望的另一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
橋模式
內容:
將一個事物的兩個維度分離,使其都可以獨立地變化。
應用場景:
當事物有兩個維度上的表現(xiàn),兩個維度都可能擴展時。
優(yōu)點:
抽象和實現(xiàn)相分離
優(yōu)秀的擴展能力
組合模式
內容:將對象組合成樹形結構以表示“部分-整體”的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性。
適用場景:
表示對象的“部分-整體”層次結構(特別是結構是遞歸的)
希望用戶忽略組合對象與單個對象的不同,用戶統(tǒng)一地使用組合結構中的所有對象
優(yōu)點:
定義了包含基本對象和組合對象的類層次結構
簡化客戶端代碼,即客戶端可以一致地使用組合對象和單個對象
更容易增加新類型的組件
外觀模式
內容:為子系統(tǒng)中的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。
優(yōu)點:
減少系統(tǒng)相互依賴
提高了靈活性
提高了安全性
代理模式
內容:為其他對象提供一種代理以控制對這個對象的訪問。
應用場景:
遠程代理:為遠程的對象提供代理
虛代理:根據(jù)需要創(chuàng)建很大的對象
保護代理:控制對原始對象的訪問,用于對象有不同訪問權限時
行為型模式
責任鏈模式
內容:使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
適用場景:
有多個對象可以處理一個請求,哪個對象處理由運行時決定
在不明確接收者的情況下,向多個對象中的一個提交一個請求
優(yōu)點:
降低耦合度:一個對象無需知道是其他哪一個對象處理其請求
觀察者模式
內容:定義對象間的一種一對多的依賴關系,當一個對象的狀態(tài)發(fā)生改變時, 所有依賴于它的對象都得到通知并被自動更新。觀察者模式又稱“發(fā)布-訂閱”模式
適用場景:
當一個抽象模型有兩方面,其中一個方面依賴于另一個方面。將這兩者封裝在獨立對象中以使它們可以各自獨立地改變和復用。
當對一個對象的改變需要同時改變其它對象,而不知道具體有多少對象有待改變。
當一個對象必須通知其它對象,而它又不能假定其它對象是誰。換言之,你不希望這些對象是緊密耦合的。
優(yōu)點:
目標和觀察者之間的抽象耦合最小
支持廣播通信
策略模式
內容:定義一系列的算法,把它們一個個封裝起來,并且使它們可相互替換。本模式使得算法可獨立于使用它的客戶而變化。
優(yōu)點:
定義了一系列可重用的算法和行為
消除了一些條件語句
可以提供相同行為的不同實現(xiàn)
缺點:
客戶必須了解不同的策略
模板方法模式
內容:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
適用場景:
一次性實現(xiàn)一個算法的不變的部分
各個子類中的公共行為應該被提取出來并集中到一個公共父類中以避免代碼重復
控制子類擴展
總結
以上是生活随笔為你收集整理的做项目开发你必须得掌握的知识:设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 彻底掌握动态规划,第一节
- 下一篇: 315. Count of Smalle