大話設計模式c++ pdf,《大話設計模式》第29章-OOTV杯超級模式大賽—模式總結(一)

 2023-10-06 阅读 19 评论 0

摘要:????本文出自《大話設計模式》第29章,轉載請注明出處。對小菜和大鳥不熟悉的朋友可先去閱讀小菜編程成長記系列。本書中出現的“[]”是表示句子摘自某書,比如[DP]表示此句摘自《設計模式:可復用面向對象軟件的基礎》,詳細說明請參看原書附錄二。本

????本文出自《大話設計模式》第29章,轉載請注明出處。對小菜和大鳥不熟悉的朋友可先去閱讀小菜編程成長記系列。本書中出現的“[]”是表示句子摘自某書,比如[DP]表示此句摘自《設計模式:可復用面向對象軟件的基礎》,詳細說明請參看原書附錄二。章中的虛擬人物姓名都是軟件編程中的專業術語,因此凡是專業術語被指向人物姓名的都用斜體字表示,以和實際術語區分。例如,“第一位是我們OOTV創始人,面向對象先生”,這里的斜體字面向對象指人名。

?

第29章 ?OOTV杯超級模式大賽——模式總結

29.1?演講任務

時間:723下午 17??地點:小菜辦公室??? 人物:小菜、公司開發部經理

???? “小菜,”開發部經理來到小菜的辦公桌前,“最近我聽說你在工作中,用到了很多設計模式,而且在你們同一項目組中引發了關于設計模式的學習和討論,反響非常好。明天全公司要開關于如何提高軟件質量的研討會,我希望到時你能做一個關于設計模式的演講。”

“我?演講?給全公司?”小菜很驚訝于經理的這個請求,“還是不要了吧,我從來都沒上過臺給那么多人講東西。我怕講不好的。”

“沒事,你就像平時和同事交流設計模式那樣說說你在開發中的體會和經驗就行了。”

“明天,時間太倉促了吧,來不及的。”小菜想法推脫。

“哈,某位大導演在他的近期的電影里不是已經向眾人證實,身材是可以靠擠來獲得的。同理可證,時間也是可以擠出來的,晚上抓緊一些,一定行的。就這么定了,你好好準備一下。”說完,經理就離開了小菜的辦公桌。

“我……”小菜還來不及再拒絕,已經沒了機會。

時間:723晚上 22???地點:小菜自己的臥室??? 人物:小菜

“講什么好呢?”小菜使勁地想呀想,卻沒有頭緒,“該死的大鳥,還不回來,不然也可以請教請教他。”

“真困”,小菜睡眼朦朧,趴到了桌上,打起盹來,不一會,進入了夢鄉。《大話設計模式》

29.2?報名參賽

時間:未知???? 地點:未知??? 人物:很多

“來來來,快來報名了,超級設計模式大賽,每個人都有機會,每個人都能成功,今天你參加比賽給自己一個機會,明天你就成功還社會一個輝煌。來來來……”只見臺子上方一很長的條幅,上寫著“OOTV杯超級模式大賽海選”,下面一個帥小伙拿著話筒賣力地吆喝著。

“大姐、二姐,我們也去報名參加吧。”工廠三姐妹中最小的簡單工廠說道。

“這種選秀比賽,多得去了,很多是騙人的,沒意思。”大姐抽象工廠說。

“我覺得我們三姐妹有機會的,畢竟我們從小就是學這個出身。”二姐工廠方法也很有興趣參賽。

“大姐,去吧,去吧。”簡單工廠拉住抽象工廠的手左右搖擺著。

“行了行了,我們去試試,成就成,不成可別亂哭鼻子。”抽象工廠用手指點了一下簡單工廠的鼻子,先打上了預防針。

“放心吧,我們都會成功的。”簡單工廠很高興,肯定地說。

三個人果然順利通過了海選。但在決賽前的選拔中,工廠方法抽象工廠都晉級,而簡單工廠卻不幸落選了。

“唔唔唔……唔唔唔……”簡單工廠哭著回到了后臺。

“小妹,別哭了,到底發生了什么?”工廠方法摟住她,輕聲地問道。

“他們說我不符合開放-封閉原則的精神,”簡單工廠哽咽地答道,“所以就把我淘汰了。”

“你在對每一次擴展時都要更改工廠類,這就是對修改開放了,當然不符合開閉原則。”抽象工廠說道,“行了,別哭了,講好了不許哭鼻子的。”

“哇……哇……哇……”被大姐這么一說,簡單工廠放聲大哭。

“好了,沒關系的,這次不行,還會有下次的。”工廠方法拍了拍她的后背安慰地說。

“二姐,你要好好加油,為我們工廠家族爭光。”簡單工廠握著工廠方法的手說,然后對著抽象工廠說,“大姐,哼,你老是說風涼話,祝你早日淘汰。”邊說著,簡單工廠卻破涕為笑了。

“你這小妮子,敢咒我。看我不……”抽象工廠臉上帶笑,嘴里罵著,舉起手欲拍過去。

“二姐救我,大姐饒命。”簡單工廠躲到工廠方法后面叫道。

三姐妹追逐打鬧著,落選的情緒一掃而空。《大話設計模式》

29.3?超模大賽開幕式

“各位領導、各位來賓、觀眾朋友們,第一屆OOTV杯超級設計模式大賽正式開始。”漂亮的主持人GOF出現在臺前,話音剛落,現場頓時響起激昂的音樂熱烈的掌聲。

“首先我們來介紹一下到場的嘉賓。第一位是我們OOTV創始人,面向對象先生。”只見前排一位40多歲的中年人站了起來,向后排的觀眾揮手。

工廠方法在后臺對著抽象工廠說:“沒想到面向對象這么年輕,40歲就功成名就了。”

“是呀,他從小是靠做simula服裝開始創業的,后來做Smalltalk的生意開始發揚光大,但最終讓他成功的是Java,我覺得他也就是運氣好。”抽象工廠解釋說。

“運氣也是要給有準備頭腦的人,前二十年,做C品牌服裝生意的人多得是了,結構化編程就象神一樣的被頂禮膜拜,只有面向對象能堅持OO理念,事實證明,OO被越來越多的人認同。這可不是運氣。”

結構化編程那確實是有些老了,時代不同了,老的偶像要漸漸退出,新的偶像再站出來。現在是面向對象的時代,當然如日中天,再過幾年就不一定是他了。”抽象工廠相對悲觀。

面向對象不是一直聲稱自己‘永遠二十五歲’嗎?”工廠方法雙手抱拳放在胸前,堅定地說,“我看好他,他是我永遠的偶像。”

“到場來賓還有,抽象先生、封裝先生、繼承女士、多態女士。他們也是我們這次比賽的策劃、導演和監制,掌聲歡迎。”主持人GOF說道。

工廠方法說:“啊,這些明星,平時看都看不見的,真想為他們尖叫。”

抽象工廠說:“我最大的愿望就是能得到抽象先生的簽名,看來極有可能夢想成真了。”

兩姐妹在那里入迷地望著前臺,自說自話著。

“現在介紹本次大賽的評委,單一職責先生、開放封閉先生、依賴倒轉先生、里氏代換女士、合成聚合復用女士、迪米特先生。”主持人GOF說道。

“那個叫開放封閉的家伙就是提出淘汰小妹的人。”抽象工廠工廠方法說。

“噓,小點聲,他們可就是我們的評委,我們的命運由他們決定的。”工廠方法把食指放在嘴邊小聲地說。

“下面有請面向對象先生發表演講。”主持人GOF說道。

面向對象大步流星地走上了臺前,沒有任何稿子,語音洪亮地開始了發言。

“各位來賓,電視機前的朋友們,大家好!(鼓掌)

感謝大家來為OOTV的超級設計模式大賽捧場。OO從誕生到現在,經歷了風風雨雨,我面向對象能有今天真的也非常的不容易。就著這機會,我來談談面向對象的由來和舉辦此次設計模式大賽的目的。

軟件開發思想經過了幾十年的發展。最早的機器語言編程,程序員一直在內存和外存容量的苛刻限制下‘艱苦’勞作。盡管如此,當時程序員還是創造了許多令人驚奇的工程軟件。后來,高性能的計算機越來越普及,它們擁有較多的內外存空間,編程也發展到一個較高的層次,不再對任一細節都斤斤計較,于是出現了各種高級語言,軟件編程開始進入了全面開花的時代。

剛開始的高級語言編寫,大多是面條式的代碼,隨著代碼的復雜化,這會造成代碼極度混亂。隨著軟件業的發展,面條式的代碼是越來越不適應發展的需要,此時出現了結構化編程,即面向過程式的開發,這種方式把代碼分割成了多個模塊,增強了代碼的復用性,方便了調試和修改,但是結構也相對復雜一些。面向過程的開發,把需求理解成一條一條的業務流程,開發前總是喜歡問用戶‘你的業務流程是什么樣的?’,然后他們分析這些流程,把這些流程交織組合在一起,然后再劃分成一個又一個的功能模塊,最終通過一個又一個的函數,實現了需求。這對于一個小型的軟件來說,或許是最直接最簡捷的做法。

而問題也就出在了這里。隨著軟件的不斷復雜化,這樣的做法有很大的弊端。面向過程關注業務流程,但無論多么努力工作,分析做得如何好,也是永遠無法從用戶那里獲得所有的需求的,而業務流程卻是需求中最可能變化的地方,業務流程的制定需要受到很多條件的限制,甚至程序的效率、運行方式都會反過來影響業務流程。有時候用戶也會為了更好地實現商業目的,主動地改變業務流程,并且一個流程的變化經常會帶來一系列的變化。這就使得按照業務流程設計的程序經常面臨變化。今天請假可能就只需要打聲招呼就行了,明天請假就需要多個級別管理者審批才可以。流程的易變性,使得把流程看得很重,并不能適應變化。

面向過程通過劃分功能模塊,通過函數相互間的調用來實現,但需求變化時,就需要更改函數。而你改動的函數有多少的地方在調用它,關聯多少數據,這是很不容易弄得清楚的地方。或許開發者本人弄得清楚,但下一位維護代碼者是否也了解所有的函數間的彼此調用關系呢?函數的修改極有可能引起不必要的Bug的出現,維護和調試中所耗費的大多數時間不是花在修改Bug上,而是花在尋找Bug上,弄清如何避免在修改代碼時導致不良副作用上了。種種跡象都表明,面向過程的開發也不能適應軟件的發展。

與其抱怨需求總是變化,不如改變開發過程,從而更有效地應對變化。面向對象的編程方式誕生,就是為解決變化帶來的問題。

面向對象關注的是對象,對象的優點在于,可以定義自己負責的事物,做要求它自己做的事情。對象應該自己負責自己,而且應該清楚地定義責任。

面向對象的開發者,把需求理解成一個一個的對象,他們喜歡問用戶‘這個東西叫做什么,他從哪里來,他能做什么事情?’,然后他們制造這些對象,讓這些對象互相調用,符合了業務需要。

需求變化是必然的,那么盡管無法預測會發生什么變化,但是通常可以預測哪里會發生變化。面向對象的優點之一,就是可以封裝這些變化區域,從而更容易地將代碼與變化產生的影響隔離開來。代碼可以設計得使需求的變化不至于產生太大的影響。代碼可以逐步演進,新代碼可以影響較少地加入。

顯然,對象比流程更加穩定,也更加封閉。業務流程從表面上看只有一個入口、一個出口,但是實際上,流程的每一步都可能改變某個數據的內容、改變某個設備的狀態,對外界產生影響。而對象則是完全通過接口與外界聯系,接口內部的事情與外界無關。

當然,有了面向對象的方式,問題的解決看上去不再這么直截了當,需要首先開發業務對象,然后才能實現業務流程。隨著面向對象編程方式的發展,又出現了設計模式、ORM、以及不計其數的工具、框架。軟件為什么會越來越復雜呢?其實這不是軟件本身的原因,而是因為軟件需要解決的需求越來越復雜了。

面向過程設計開發相對容易,但不容易應對變化。面向對象設計開發困難,但卻能更好的應對千變萬化的世界,所以現代的軟件需要面向對象的設計和開發。《大話設計模式》

(鼓掌)

設計模式是面向對象技術的最新進展之一。由于面向對象設計的復雜性,所以我們都希望能做出應對變化,提高復用的設計方案,而設計模式就能幫助我們做到這樣的結果。通過復用已經公認的設計,我們能夠在解決問題時避免前人所犯的種種錯誤,可以從學習他人的經驗中獲益,用不著為那些總是會重復出現的問題再次設計解決方案。顯然,設計模式有助于提高我們的思考層次。讓我們能站在山頂而不是山腳,也就是更高的高度來俯視我們的設計。

如今,好的設計模式越來越多,但了解他們的人卻依然很少,我們OOTV舉辦設計模式大賽的目的一方面是為了評選出最優秀的設計模式,另一方面也是希望讓更多的人了解她們,認識她們,讓她們成為明星,讓她們可以為您的工作服務。

祝愿本屆大賽圓滿成功。謝謝大家![DPE]”(鼓掌)

正在此時,突然一個人雙手舉著一塊牌子沖上了講臺,紙牌上寫著“Service-Oriented Architecture(面向服務的體系架構SOA)”,口中大聲且反復地說道:“抵制Object-Oriented,推廣Service-OrientedOO已成往事,SOA代表未來。”

這突如其來的變化,讓全場嘩然,很多人都交頭接耳,說著關于SOAOO的關系。只有面向對象先生依然站在講臺上,微笑不語,顯然久經風雨的他對于這種事早已見怪不怪。保安迅速帶著此人離開了會場。會場漸漸又恢復了安靜。

??
另需聲明,選擇本章提供閱讀其實只是因為它比較完整,可以獨立成文。因為是對所有設計模式講解后的總結,所以沒有對代碼的分析,個別朋友如果理解為整本書都只是在講故事那就是對文章的誤讀了。需要了解關于本書如何講解單個設計模式可以參看小菜編程成長記系列的文章。?

接下篇《大話設計模式》第29章-OOTV杯超級模式大賽—模式總結(二)

轉載于:https://www.cnblogs.com/cj723/archive/2007/11/16/961117.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/120664.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息