設計模式完整備忘錄

小言:這不是設計模式講解型博文,以下將設計模式的概述、類圖,代碼示例,總結分每篇博文單獨展示,現將其歸類,便于以后翻閱,設計模式也不是一兩個月學完了就能完全領悟,它只告訴我們幾個解決問題的思路和方法,將具體問題抽象為模型的思想,武功也是,套路需要學,但是基本功(如馬步、力量,毅力,抗打擊能力)絕對不可或缺,在學習設計模式的同時更需要看看數據結構和算法方面的基礎東東。設計模式不是銀彈,如果非要用降龍十八掌對付一只螞蟻不是一個好想法。本人也是學藝不精,整理當中難免有錯誤,希望在大家的批評指正,共同進步。

一、創建型模式 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

  • 工廠方法(FactoryMethod)

? ? ? ? ? ?定義一個用于創建對象的接口,讓子類決定實例化哪一個類。

? ? ? ? ? ?FactoryMethod使一個類的實例化延遲到其子類。

  • 抽象工廠(AbstractFactory)

? ? ? ? ?提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。

  • 建造者(Builder)

? ? ? ? ?將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。

  • 單例模式(Singleton)

? ? ? ? ?保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。

  • 原型模式(Prototype)

? ? ? ? ? 用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。

二、結構型模式 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

  • 適配器模式(Adapter)

? ? ? ? ? 將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本

? ? ? ? ? 由于接口不兼容而不能一起工作的那些類可以一起工作。

  • 橋接模式(Bridge)

? ? ? ? ? 將抽象部分與它的實現部分分離,使它們都可以獨立地變化。

  • 組合模式(Compsite)

? ? ? ? ? 將對象組合成樹形結構以表示"部分-整體"的層次結構。

? ? ? ? ? "Composite使得用戶對單個對象和組合對象的使用具有一致性。"

  • 裝飾模式(Decorator)

? ? ? ? ? 動態地給一個對象添加一些額外的職責。就增加功能來說,Decorator模式相比生成子類更為靈活

  • 外觀模式(Facade)

? ? ? ? ?為子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,

? ? ? ? ?這個接口使得這一子系統更加容易使用。

  • 享元模式(Flyweight)

? ? ? ? ? 運用共享技術有效地支持大量細粒度的對象。

  • 代理模式(Proxy)

? ? ? ? ? 為其他對象提供一種代理以控制對這個對象的訪問。

二、行為型模式 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

  • 責任鏈模式(Chain Of Responsibility)

? ? ? ? ?使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。

? ? ? ? ?將這些對象連成一條鏈,?并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。

  • 命令模式(Command)

? ? ? ? ? 將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;

? ? ? ? ? 對請求排隊或記錄請求日志,以及支持可撤消的操作。

  • 解釋器模式(Interpreter)

? ? ? ? ? 給定一個語言,定義它的文法的一種表示,并定義一個解釋器,

? ? ? ? ? 這個解釋器使用該表示來解釋語言中的句子。

  • 迭代器模式(Iterator)

? ? ? ? ? 提供一種方法順序訪問一個聚合對象中各個元素,而又不暴露該對象的內部表示。

  • 中介者模式(Mediator)

? ? ? ? ? 用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,

? ? ? ? ? 從而使其耦合松散,而且可以獨立地改變它們之間的交互。

  • 備忘錄模式(Memento)

? ? ? ? ? 在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。

? ? ? ? ? 這樣以后就可將該對象恢復到原先保存的狀態。

  • 觀察者模式(Observer)

? ? ? ? ?定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,

? ? ? ? ?所有依賴于它的對象都得到通知并被自動更新。

  • 狀態模式(State)

? ? ? ? ? 當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。

  • 策略模式(Strategy)

? ? ? ? ? 定義一系列的算法,把它們一個個封裝起來,并且使它們可相互替換。

? ? ? ? ? 本模式使得算法可獨立于使用它的客戶而變化。

  • 模板方法(TemplateMethod)

? ? ? ? ? 定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。

? ? ? ? ? TemplateMethod使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

  • 訪問者模式(Visitor)

? ? ? ? ? 表示一個作用于某對象結構中的各元素的操作。

? ? ? ? ? 它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。

附上每一個模式的代碼示例,每一種模式示例代碼都通過調試,調試環境vs2010

下載地址:http://files.cnblogs.com/jqbird/DesignPatternLab.rar

轉載于:https://www.cnblogs.com/jqbird/archive/2011/09/08/2171198.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275279.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275279.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275279.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Microsoft Web Application Stress Tool對web進行壓力測試

你的Web服務器和應用到底能夠支持多少并發用戶訪問?在出現大量并發請求的情況下,軟件會出現問題嗎?這些問題靠通常的測試手段是無法解答的。本文介紹 了Microsoft為這個目的而提供的免費工具WAS及其用法。另外,本文介紹了一種Web應…

2021前端高頻面試題整理,附答案

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以加我微信 ruochuan12若川視野原意是若川的前端視野。但太長了就留下了四個字,不知道的以為關注的不是技術公眾號。今天分享一篇慕課網精英講師河畔一角的好文章~廢話不多說,…

OO第二單元作業小結

總結性博客作業 第一次作業 (1)從多線程的協同和同步控制方面,分析和總結自己三次作業的設計策略。 第一次作業為單電梯傻瓜調度,可以采用生產者——消費者模型,是一個有一個生產者(標準輸入電梯請求),一個…

dribbble加速vpn_關于Dribbble設計的幾點思考

dribbble加速vpn重點 (Top highlight)I’d like to start with the following quote from Paul Adam’s “The Dribbbilisation of Design,” a powerful read that examines the superficiality of modern product design portfolios, often containing Dribbble posts that l…

JS Compress and Decompress

<html><head><title>JavaScript字符串之壓縮與還原</title><meta http-equiv"Content-Type"content"text/html; charsetutf-8"/><script type"text/javascript"><!--/** * 壓縮 */functionCompress(strN…

尤雨溪推薦神器 ni ,能替代 npm/yarn/pnpm ?簡單好用!源碼揭秘!

1. 前言大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12想學源碼&#xff0c;極力推薦之前我寫的《學習源碼整體架構系列》jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、…

如何了解自己的認知偏差_了解吸引力偏差

如何了解自己的認知偏差Let me introduce you the attractiveness bias theory known as cognitive bias.讓我向您介紹稱為認知偏差的吸引力偏差理論。 Think about a person with outstanding fashion. It will draw our attention, and maybe encourage us to interact with…

隱馬爾可夫模型(HMM)及Viterbi算法

HMM簡介 對于算法愛好者來說&#xff0c;隱馬爾可夫模型的大名那是如雷貫耳。那么&#xff0c;這個模型到底長什么樣&#xff1f;具體的原理又是什么呢&#xff1f;有什么具體的應用場景呢&#xff1f;本文將會解答這些疑惑。  本文將通過具體形象的例子來引入該模型&#xf…

尤大直播分享:vue3生態進展和展望

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12前言10月23日&#xff0c;參加了前端早早聊組織的【vue生態專場】&#xff0c;準備寫一波分享方便大家學習。早上有4個話題&#xff1a;volar開發&#xff0c;搭建平臺組件開發…

利用Python查看微信共同好友

思路 首先通過itchat這個微信個人號接口掃碼登錄個人微信網頁版&#xff0c;獲取可以識別好友身份的數據。這里是需要分別登錄兩人微信的&#xff0c;拿到兩人各自的好友信息存到列表中。 這樣一來&#xff0c;查共同好友就轉化成了查兩個列表中相同元素的問題。獲取到共同好友…

女生適合學ux嗎_UX設計色彩心理學,理論與可訪問性

女生適合學ux嗎Colour is an interesting topic, which I feel is often overlooked and sometimes under-appreciated. One of the first things I was taught was the power of colour, how it can have an impact on human emotion, and that there should be purpose behin…

初學者也能看懂的 Vue2 源碼中那些實用的基礎工具函數

1. 前言大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12想學源碼&#xff0c;極力推薦之前我寫的《學習源碼整體架構系列》jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、…

清除浮動mini版

1&#xff09; 清除浮動mini版(簡約而不簡單).clr:after { content:"";display:table;clear:both;}.clr{zoom:1;} 轉載于:https://www.cnblogs.com/jinbiao/archive/2011/09/26/2191170.html

Fiddler 十分鐘最全使用介紹

Wireshark 、HTTPWatch、Fiddler的介紹 Firebug雖然可以抓包&#xff0c;但是對于分析http請求的詳細信息&#xff0c;不夠強大。模擬http請求的功能也不夠&#xff0c;且firebug常常是需要“無刷新修改”&#xff0c;如果刷新了頁面&#xff0c;所有的修改都不會保存。Wiresha…

視覺測試_視覺設計流行測驗

視覺測試重點 (Top highlight)I often discuss the topic of improving visual design skills with junior and mid-level designers. While there are a number of design principles the designers should learn and practice, one important skill that is not often consid…

如何給開源項目提過 PR 呢?其實很簡單

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12源碼共讀群里有小伙伴聊到如何給開源項目提PR&#xff0c;所以今天分享這篇文章。你有給開源的庫或者框架提過 PR 嗎&#xff1f;如果沒有&#xff0c;那么今天的文章會教你怎么…

一次回母校教前端的經歷

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12已進行了三個月&#xff0c;很多小伙伴都表示收獲頗豐。分享一篇武大畢業的耀耀大佬的文章。有些時候會受限于環境影響&#xff0c;特別是在校大學生。所以要融入到積極上進的環…

設計插畫工具_5個強大的設計師插畫工具

設計插畫工具As Product Designers, most likely, we have come across illustrative work. Visual design is one important element in enhancing the user experience. As many gravitate toward attractive looking products, designers are also adapting to the changing…

如何才能更合理地分配項目獎金?

項目獎金通常情況下都是屬于基本工資之外的一種績效獎勵&#xff0c;也就是說&#xff0c;它在員工的薪酬中&#xff0c;是屬于浮動的那一部分收入&#xff0c;而不是一種固定收入。基于這樣一種認知&#xff0c;跟大家討論下如何才能更合理地進行項目獎金的分配&#xff1f; 首…

Codeforces 741 D - Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

D - Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 思路&#xff1a; 樹上啟發式合并 從根節點出發到每個位置的每個字符的奇偶性記為每個位置的狀態&#xff0c;每次統計一下每個狀態的最大深度 為了保證鏈經過當前節點u&#xff0c;我們先計算每個子樹的答案…