日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式的理解的总结

發布時間:2023/12/20 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式的理解的总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考的博客:http://blog.csdn.net/wangeen/article/details/8272501


最近又把設計模式翻了一邊,寫個個人總結,這個總結比較簡單,主要是一些理解,對于他們的實現和應用以后再總結

設計模式是編程抽象化的一個具體的應用,它讓程序更好的閱讀和理解,邏輯上更加合理,是通向更大規模軟件的一個基礎,換個說法,如果一個軟件的模式很混亂那么它混亂到一定的程度就再也編寫和維護不下去了,一直覺得Java?c#的設計模式體現得更好,這是因為和他們的一切都是對象的理念比較一致,c++的稍微少一些,但是同樣重要。


設計模式在大體上分3種

1. 如何構造對象而采用的模式(creational pattern)

2. 對象本身如何進行組織優化的模式(structure pattern)

3. 對象之間的行為如何管理的模式(behavioral pattern)


creational pattern主要有如下幾個幫助構造對象的pattern,

? ? 1. abstract factory, ?一個抽象工廠類可以派生出很多具體的工廠類;一個抽象產品類可以派生出很多具體的產品類;

其核心就是創建很多的product對象,然后在用一個factory對象里面構造很多createProduct的方法,使用起來也很簡單,就是調用這一系列的create function,隱藏了對具體的對象的new, 另外factory通常都是singleton, 這個模式還有一個順帶的好處就是可以很方便的切換不同的product family, 這個模式使用可以提高程序的觀感和可讀性,一個文件的list對所有的對象的創建都包含了。

? ? 2. builder, 把復雜對象的構造和表示分離,所謂的構造就是builder中的一系列的method,這個pattern在anuvad中用得很好, 這個模式其實和abstract factory很類似,區別就是這里把一個復雜的對象分成好多step來構造,而abstract factory是一系列的小對象,也就是這里的step相當于那里product family中的一個。

? ? 3. factory method, 一個工廠類根據傳入的參數創建對應的產品類;

就是提供一些method來創建具體的對象,常用的比如創建一個default的對象,或者根據一個id來決定來用哪個method。?

? ? 4. prototype,通過copy一些具體的對象實例來構造新對象,是一種相對實例化的結構,注意每個product都要實現copy function,這個模式的理解還不透徹。

? ? 5. singleton:全局代碼之間只有一個實例,需要做好保護。


structure pattern主要有如下幾種優化組織結構的方法。

? ? 1. ?adaptor,就是用多重繼承的方式讓一個已有的對象能支持別的對象的接口。

? ? 2. bridge, 就是將一個對象拆成兩個,一個是abstraction(比較穩定的部分接口面對客戶),另一個是implementation, QT當中有很多這樣的pattern

? ? 3. composite, 就是一個對象,包含了一個對本身的list,這樣就構成了一個tree, 然后對要用的函數對這個list進行實現,對于單個和整體的處理可以用統一的接口,此pattern和chain of reponsibility關聯很緊。

? ? 4. decorator, 對已有對象構造一個decorator,然后繼承這個對象擴展一些功能, B= decorator(A),那么B具有了A和擴展的一些功能。

? ? 5. facade, 對應用庫提供了一些更高層次的接口的抽象,提供更簡單的接口,這個模式的理解還不透徹。

? ? 6. flyweight, 對大量的重復使用的對象緩存,建立一個map, 當要使用的時候先查看有沒有有就不要創建了,http://supercrsky.iteye.com/blog/372714

? ? 7. proxy, 對一個已有的class再次封裝,控制對這個對象的訪問,和decorator很類似,但是一個是擴展功能,一個是限制,實現很類似但是更多的是架構上的不一致


behavioral pattern, 描述了對象之間的行為,其封裝的核心即行為本身也可以是對象

? ? ?1. chain of responsibility 所有的class 都繼承同一個動作,每一個class都對同一個動作作出響應,比如打印log, 一個接一個,用起來很方便

? ? ?2. command, 把action作為一個對象,里面有一個要處理的對象的指針,可以用來紀錄操作和(re)do

? ? ?3. interpreter, 打造自己的語言解釋器,每一個語法作為一個對象

? ? ?4. iterator, stl里面有實現,用起來真的很方便

? ? ?5. mediator, 構造一個class,可以將子class的變動相互通知,比如GUI中的組合控件

? ? ?6. memento, 本質就是一個保存瞬時狀態的structure, 可以進行還原, 和command一起使用來實現redo功能

? ? ?7. observer, MVC架構實現的核心pattern, 和mediator很相似,只是這個一對多,另一個是任意組合。

? ? ?8. state, 傳說中的狀態機, 最常見的例子是TCP的狀態的轉換,用戶只要面對一個簡單的接口,每個狀態是一個class, 所有的狀態的轉換都在各個class內自動完成。

? ? ?9. strategy, 把算法分裝成對象,A=new B(算法 N)

? ? ?10. template method, 把算法切割很幾步,把其中幾步退化(defer)到子class中去做

? ? ?11. ?vistor,構造一個vistor對象, 每個對象在vistor中都有一個對應的函數, vistor和對象相互耦合,不改變原來對象就可以訪問它

? ? ? ? ? ?E::accept(V&v){v.vE(this)};?

boost中有一些設計模式的模板,比如abstract factory, 按照他們的說法就是abstract factory有很多冗余的代碼,用template會很簡單,另外還有flyweight, 設計得比較好作為一種allocate和其他的stl容器配合使用非常方便,也很節省內存,另外model c++里面用template的policy和traits來實現了很多的設計模式,這有個好處就是一次設計永遠有用。

總結

以上是生活随笔為你收集整理的设计模式的理解的总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。