初步认识设计模式
最近一直在想著學習設計模式,這里說的是面向對象領域的模式,找了些資料看了看,昨天也剛買了那本經典作品:設計模式-可復用面向對象軟件的基礎,只是看了下引言就收獲很多,在這里把自己所能理解到的一些點點滴記錄下來,算是自己的復習,也希望給大家一點幫助,希望能與大家多多交流學習,小弟感激不盡!以下這些是自己感覺挺有意義。今天只是做個簡單開篇,GO!
可復用面向對象的軟件設計的基礎!!從題目中我們可以看到它是在講軟件設計,而且是在面向對象的領域中所涉及到的軟件設計問題,設計的目的之一就是為了軟件方法的可復用性,當然這里所講的只是一個軟件設計的一個基礎,重在思考,重在軟件設計思想的培養。
談起設計模式,也許成為了一個古老的話題,整天思考著怎樣去解決一個軟件系統的實現問題,想著去寫可復用、可擴展的的模塊,如果沒有軟件的這些特殊性,特別是從時間角度來考慮軟件的變化性,就這一點就決定著軟件必須要面對和解決的一個不可逃避的問題,如果沒有這些特殊性也許它(設計模式)不會被這么重視,而且應用設計模式也是有一定的代價,比如會設計更多的類,類與類之間的關系還要去了解等,也許對于軟件開發的初學者(當然我也是^-^)來說學習這方面會有難度,因為經驗少的原因,因為軟件設計思想沒有更好的培養等這些主觀因素,當然這也是需要學習的原因了,設計模式不單單是書中講的這23種,還有很多其他的,不過我感覺掌握這些模式的要領也不容易了,哈哈。
自己的理解,設計模式它不僅僅是一種算法,更是一種可以解決重復問題的思想論,它是可以應用在一些特定場合來解決特定的軟件問題的有效方法,相同的,也許處在別的環境中可能它并不是一個好的解決方法,或許它還會給軟件帶來累贅,所以不能亂用設計模式,要“對口”,所以在實現設計模式的原則中提出一條就是使用重構來實現模式,當然也有非常有經驗有遇見性的設計大師或者一些很明顯的應用模式的問題。
每一個模式都描述了在軟件開發中不斷重復發生的問題,以及該問題的解決方案的核心,在以后的開發中就可以有經驗的來復用這種模式。所以每個模式都有一個對整個過程有概括性的模式名稱,現在想一下這23種設計模式,這些名稱還真是起得相當的好!!在每個模式中都有四個要素,分別是:模式名稱、問題、解決方案、效果。還是那句,正確使用模式的話會給軟件系統帶來絕對好的擴展性和靈活性,應用不好的話效果可想而知。
要學習設計模式,在這里不得不提的重中之重就是面向對象的概念,大家說的抽象、封裝、繼承、多態,我想在腦袋中都刻成碑了!但重要的是要去理解這些概念,把這些概念"立體化"。
如果說設計模式夠抽象,那一些設計原則更是體現在了模式的身上,也許大家都知道,在這里就簡單的列一下:
1、針對接口編程而不是針對實現編程。我們說繼承是可復用的擴展的基本機制,繼承可以很好的實現實現代碼與客戶的有效分離,使得客戶程序不必了解具體實現,而實現只管它自己的事,在遇到可變性的問題時我只去擴展或進行少許改變就可以應對軟件需求的變化(當然這是在設計模式應用合理的情況下。),這也就把職責進行了分離,在這些設計模式中大量用到了接口(我們說承繼分為類繼承與接口繼承,都知道吧,呵呵)。
2、優先使用對象組合,而不是類繼承。上面剛說完接口多么的好,確實,繼承實現了接口、類之間的可復用性與擴展性,但深刻考慮下,這種繼承其實暗暗的造成了接口與實現之間的耦合關系,我們也稱之為白箱復用,也就是說繼承的類與類之間是相互了解的,所以在這里如果接口層要進行需求更改的話這些所以的關系都要進行一個復雜的改變,當然這個可以去解決,這也是這個原則存在的意義,使用對象組合,我們說這種關系是類與類之間的一種松耦合的實現方式,我們稱之為黑箱復用,可以實現好的擴展性,在后面的結構型模式中把這種思想體現的非常秒!
在這里需要肯定的一點是,繼承與組合二者缺一不可,我們沒有理由說誰好誰壞,所有的應用都是根據軟件的特點來決定的。
3、使用重構的方式得到模式。這一條我是從李建中老師的講義上看到的,非常的有道理,可以說所有的模式都是經過不斷的演變重構而成的,開發過程中不定會遇到什么樣的問題,所以盲目的應用模式其實是對模式的一種不正確的使用,反而不會對軟件的開發帶來好處。
以下列出了更具體的原則供大家參考:
1、單一職責原則。這一原則體現了一個類只存在一個使它變化的原因,把類設計的職責很復雜看著就頭暈!!!
2、開放封裝原則。這里提到的就是我們說的類是不可修改的,是可擴展的,雖然這樣說,不過我是遇到就改。。哎。。。
3、Liskov替換原則。子類必須能夠替換它們的父類.
4、依賴倒置原則。具體的說明:高層模塊不應該領帶于低層模塊,二者都應該領帶于抽象。抽象不應該依賴于實現細節,實現細節應該依賴于抽象。沒得說,這條絕對重要!!
5、接口隔離原則。這條原則告訴我們不應該把接口設計的非常復雜,只能去定義自己功能的抽象,子類不應該實現它不用的抽象。
大體的就是這幾個,當然還有別的一些原則了。如果說設計模式是絕世武功的招術,那這些原則就是心法了,可謂無招勝有招呀!哈哈!!
突然想到書中介紹了一個在我們身邊非常經典的組合模式的應用,窗體這個容器的實現,把一對多的關系實現成一對一的關系去解決問題,窗體容器即裝載容器控件,也可以裝載葉控件,而內部的容器控件又可以嵌套更多的子、葉控件!
就這些了,有空再寫具體的,以上有不合理的地方還請大家多指教!Over.
轉載于:https://www.cnblogs.com/quluqi/archive/2010/01/29/1659495.html
總結
- 上一篇: SQL Server 2005 COM+
- 下一篇: c#操作Xml(八)