青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

huaxiazhihuo

 

WINDOWS與設計模式

        作為C++的堅實粉絲,我一直很排斥JAVA,并不是JAVA這種語言不好,而是Java迷的那副嘴臉,事事都要與C++爭,并且還堅稱JAVA比C++,甚至連執行效率都要勝過C++,什么JIT運行時能監視代碼,選取執行頻率最高的代碼,根據特定的平臺,進行特別處理,生產出最優化的機器代碼;又說什么垃圾回收能夠解決C++中的內存管理問題,并且內存分配遠遠勝過C++中的手工人肉管理內存的毛病,其實,內存管理從來就不是C++中的嚴重問題,只要設計得好,應用層中的代碼甚少可以不出現new, delete。至少delete可以不出現,大家知道WHY的;種種論調,無理取鬧之極。而最令我受不了的,就是他們閉口開口,都離不開設計模式,搞得設計模式好像成為了JAVA的專有產品。須知,第一本設計模式的書,也是最最經典的那本四人書,其對設計模式的實現語言,采用的就是SmallTalk 和C++,一開始就不關JAVA的一點事情,并且書中C++還占了較大的比重。關于四人書,最讓我欣慰的一件事情就是,四位巨頭并沒有響應JAVA迷的強烈呼聲,采用JAVA來實現設計模式的第二版。當然,我也承認,用JAVA來實現設計模式,確實來得要比C++清爽,JAVA的這種語言,好像就是專為設計模式量身訂做。只可惜,市面上任何一本JAVA的設計模式書,沒有一本及得上我們C++的那一本設計模式圣經,C++中不必再需要設計模式的書了,因為最好的書就已經擺在那里了,涵蓋了設計模式中的方方面面,濃縮精華得很。突然想起,C++的教材也不需要那么多,因為老爺子已經寫了一本最好的書了,其他書的內容,都已經涵蓋在那本C++語言圣經中了。至于那些不被C++圣經所提及的,那都是一些走火入魔的玩意,玩玩還可以,開闊開闊視野也不錯,但真要用在實際項目中,還是少用為妙。罪過罪過,C++中的好書確實有好幾本,不宜一棍子打死。
        有趣的是,設計模式在JAVA中被捧上了天,沒有設計模式,JAVA就沒法活下去。反而C++作為設計模式的第一實現語言,卻不怎么感冒。不能說被輕視,但起碼沒有普遍被重視。即使C++中的高手,也沒有對設計模式如何如何的推崇備至,他們貌似更加喜歡玩語法糖,熱衷于在C++中模擬出其他語言的特性。這也難怪,C++有四種編程典范,設計模式的主要應用就在于面向對象,面向對象不過是其中最不成熟的一種,在C++中,最成熟的要數基于對象的編程,當然,拜C語言成熟,面向過程也熟得要爛了,泛型這東西也挺前衛的,而C++中的面向對象,一直臭名昭著,無論怎么努力,都難以搬上臺面。注意,C++中的面向對象與虛函數是兩碼事,至少在我看來是這樣的。
        好了,該談談我對設計模式的看法了,一句話,我對設計模式殊無好感,源于我內心對當前的面向對象編程風格的排斥,因為那是偽面向對象編程,所謂的偽面向對象,就是指通過單根繼承和針對接口或抽象類來寫代碼,就以為是在進行面向對象的編程,那實在是太天真了。設計模式中的那些點子,用得好,確實能解決偽面向對象的一些問題,無可厚非;用得不好,無緣無故地引入一些不必要的東西,模式的應用意味著間接性的增厚。現實中,能恰當地用好模式的人,少之又少,模式總是出現在一些不必要出現的場合下。很多人都是生吞活剝了23種模式之下,內心就沾沾自喜,到處躍躍欲試,鮮有人嘗試理解模式背后的統一思想是什么,或者說,如果代碼本身就已經能夠很好類與類之間的耦合問題,可勝過千萬種設計模式。
        以下文字,與孟巖大俠的觀點,存在部分重復之處,讀者認為在下是在拾他的牙慧,我也不反對,畢竟人家的文章反表在前,我無話可說,本文的重點,旨在表達在下對設計模式的鄙視。
        既然有偽面向對象,就有真面向對象。真面向對象的編程,就是你只知道一個對象的ID,其他的一切事情,它繼承自那些父類,實現了那些接口,統統一概都不得而知,然后你只能通過這個ID給對象發送消息,以此來驅使對象做一些事情,注意,確確實實是只是發送消息,而不是調用該對象的函數,那怕是調用了該對象實現的接口函數,也意味著該對象的依賴,好吧,說錯了,是對該接口的依賴,不管怎么樣,都是依賴,而且依賴接口,還搞得客戶代碼和對象都要依賴于同一個接口了。
給對象發送消息,聽起來似乎有點抽象,但是,只要聯想到WINDOWS的窗口句柄和消息處理函數,就自然明白是怎么回事了。在WINDOWS下,每一個窗口都是一個對象,窗口句柄代表了對象ID。操作窗口時,只能通過SendMessage或PostMessage來讓窗口作一些事情。SendMessage或PostMessage的四個參數,分別是對象ID、消息編號、消息參數1和消息參數2。客戶代碼在使用窗口時,不需要假設什么接口,能做的,僅須做的,僅僅就是給它發送消息,客戶代碼完全無須依賴于什么鬼接口,非常簡單明了。但是,這里存在一個問題,消息參數1和消息參數2都是void*類型,不安全耶,要是誤發送錯了消息,那該怎么辦。在偽面向對象中,客戶也可能在調用接口參數時,也可能會傳錯了參數,只不過是編譯器可以幫你找出來。其實類型不安全,也沒什么,客戶既然要發送消息給對象,自然要遵守使用的協議,自然要清楚自己在做什么事情,這本來就是C語言的精神,一切相信程序員。
        好了,該是給WINDOWS大唱贊歌了。WINDOWS系統的窗口是我見過中算是比較象樣的面向對象的典范了。將面向對象的精神貫徹到底,窗口對象很好地做到了僅僅是純粹解析消息,執行消息,與外界的其他對象,不存在任何一點耦合。一個窗口對象中的lpfnWndProc其實可以理解成指向虛函數表的指針,但是它卻要比虛函數表的指針功能更加強大靈活,并且還不存在虛擬函數表的種種問題。強大之處,就之于lpfnWndProc相當于指向一個龐大的虛函數表,這個表有2的32次方多個虛函數,靈活之處可以突破虛函數的種種限制。當你要給一個窗口對象添加新的功能,或者不滿意它的某些原有操作的時候,你完全可以子類化該窗口,在子類化操作中,截取關心的消息,解析消息,執行消息,至于其他的消息,直接交給lpfnOldWndProc或DefWindowProc就是了。從這個意義上講,所有的窗口對象繼承于DefWindowProc,而子類化窗口即是繼承于lpfnOldWndProc,但是,這里的繼承,卻沒有偽面向對象中的繼承或實現接口的種種弊端。而且,在你子類化窗口的時候,不用影響到客戶的任何一點點代碼,客戶代碼依舊是發送消息,卻不知道窗口對象已經舊貌換新顏了,OH,這實在太美妙了。所有的耦合,奇跡般的消失得干干凈凈了。消息比之于接口,那完完全全是純粹的正交關系,并且沒有接口的種種累贅,種種缺陷。并且更爽的是,即使對象沒有處理消息,也沒有關系,客戶代碼依然可以給對象發送消息。
        從某種意義上講,設計模式不過是為了解耦對象與對象之間的耦合關系,當對象之間不存在耦合的時候,設計模式還有什么存在的意義嗎?以下結合WINDOWS系統來理解,所謂的設計模式,不過是消息發送的一些應用罷了。下面的舉例,例子之間沒有什么必然關系,我想到那里就寫到什么,模式后面似乎應該帶上英文,但我也懶得寫了。

觀察者模式:一個廣播消息就搞定了;
模板方法:不過是按順序給一個對象發送某些指定的消息而已;
工廠方法、抽象工廠:用一個或幾個lpClassName就搞定了;
原型:不過是發送一條WM_COPYOBJECT的消息而已;
裝飾者或者狀態:嘿,子類化就完成了,并且非常徹底,一點都不覺得別扭;
命令:對象將SendMessage中的消息編號、消息參數1和消息參數2保存起來就是了,這沒什么大不了的;
策略:不過一個回調函數,外加必要的參數;
橋接:貌似沒什么必要;
……
沒有了!落得個一片白茫茫大地真干凈!

posted on 2012-05-31 17:59 華夏之火 閱讀(2261) 評論(8)  編輯 收藏 引用

評論

# re: WINDOWS與設計模式 2012-05-31 20:49 casualfish

同意你的觀點,良好的模塊化設計,清楚定義不同模塊之間的邊界,設計好不同模塊之間的數據傳輸格式,同樣可以解除現有設計之間的耦合。設計模式就是精巧的圖紙,用不好就會造出四不像的玩意兒,而模塊化設計將所有的元素投影到一維平面上,對象之間的交流溝通很簡單,不需要復雜的層次。  回復  更多評論   

# re: WINDOWS與設計模式 2012-05-31 23:21 春秋十二月

設計模式是前輩大師們總結的一套關于軟件設計的經驗方法,面向對象是一種思想,而不是具體技術,只要具備了這種思想和運用能力,用C都可以寫出比C++更模塊化的程序來,希望看到樓主實際的代碼體現呀  回復  更多評論   

# re: WINDOWS與設計模式 2012-05-31 23:49 華夏之火

這套設計經驗只適用于所謂的面向接口的面向對象編程,在純粹的面向對象編程中,也即對象之間只是通過互發消息來通信,根本就不必理會什么設計模式。我正在仿造WINDOWS的窗口框架,編寫一個面向對象的框架,里面沒有繼承,沒有接口,沒有虛函數,對象之間只能通過消息進行交互。其實在動態語言和函數式語言,根本就沒有設計模式的用武之地@春秋十二月
  回復  更多評論   

# re: WINDOWS與設計模式 2012-06-01 00:07 春秋十二月

@華夏之火
呵呵  回復  更多評論   

# re: WINDOWS與設計模式 2012-06-02 19:49 游客

其實涉及模式無非是熟練組合使用了面向對象的特性,在軟件開發中過度使用涉及模式本身也有害,我記得Erich Gamma曾經對參與設計開發的Junit中過多使用設計模式也有過提及。  回復  更多評論   

# re: WINDOWS與設計模式[未登錄] 2012-06-05 09:43 123

博主的道理是對的,對于設計模式的評價有失偏頗了。

其實設計模式,就像武功套路,是拿來演練,不是拿來打架的。

設計模式存在的意義就是用于學習和理解程序的設計,設計模式的存在環境如同物理中的真空環境,絕對光滑表面。單純環境,用于學習是非常好的。  回復  更多評論   

# re: WINDOWS與設計模式 2012-06-05 11:46 華夏之火

或者,設計模式能幫助碼農寫出好一點的所謂的面向對象的代碼,但也可能將代碼搞得更加復雜難懂了@123
  回復  更多評論   

# re: WINDOWS與設計模式 2013-06-17 14:57 panovr

可以了解一下Objective-C語言和Cocoa框架。  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導航

統計

常用鏈接

留言簿(6)

隨筆分類

隨筆檔案

搜索

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            这里只有精品丝袜| 美女网站久久| 亚洲深夜激情| 99精品欧美一区| av不卡免费看| 在线视频精品一区| 99精品久久| 一区二区三区视频免费在线观看| 91久久精品www人人做人人爽| 久久日韩精品| 蜜桃精品久久久久久久免费影院| 美女图片一区二区| 欧美国产一区二区| 亚洲经典自拍| 99re这里只有精品6| aa级大片欧美三级| 午夜欧美大片免费观看| 欧美一区二区三区视频在线 | 欧美另类高清视频在线| 欧美精品在线观看一区二区| 欧美精品高清视频| 欧美午夜片在线观看| 国产精品v日韩精品| 国产伦精品一区| 极品尤物久久久av免费看| 好吊成人免视频| 亚洲精品国产精品国自产观看浪潮| 亚洲精品日日夜夜| 亚洲一区二区综合| 久久久久久成人| 免费毛片一区二区三区久久久| 亚洲国产第一页| 一二三四社区欧美黄| 欧美一级在线视频| 免费影视亚洲| 国产精品久久7| 精品999网站| 9色国产精品| 久久精品av麻豆的观看方式| 欧美 日韩 国产精品免费观看| 欧美韩日亚洲| 亚洲性夜色噜噜噜7777| 久久久久久自在自线| 欧美猛交免费看| 国产区精品在线观看| 狠狠噜噜久久| 亚洲视频网在线直播| 久久先锋资源| 99视频在线观看一区三区| 欧美一区二区三区精品电影| 欧美金8天国| 国产亚洲成av人在线观看导航| 亚洲欧洲日产国码二区| 欧美一区二区播放| 亚洲国产高清自拍| 欧美一区二区三区精品电影| 欧美日韩精品综合在线| 一区在线视频观看| 亚洲欧美日韩精品久久久久| 欧美华人在线视频| 欧美伊人久久久久久午夜久久久久 | 久久偷窥视频| 国产精品美女一区二区| 亚洲国产高清一区| 久久福利毛片| 亚洲精品一区二区三区樱花 | 国产午夜精品一区二区三区欧美| 日韩一级欧洲| 美乳少妇欧美精品| 亚洲综合色网站| 欧美日本精品在线| 亚洲第一综合天堂另类专| 亚洲欧美日韩国产综合在线 | 在线免费日韩片| 亚洲欧美网站| 亚洲精品美女在线观看| 久久深夜福利免费观看| 国产女人精品视频| 亚洲综合大片69999| 亚洲日韩成人| 美腿丝袜亚洲色图| 尤妮丝一区二区裸体视频| 欧美在线视频不卡| 亚洲五月婷婷| 欧美日韩亚洲一区二区三区四区| 最新亚洲一区| 欧美成人午夜| 久久一综合视频| 韩日成人在线| 久久人体大胆视频| 久久精品日韩| 激情懂色av一区av二区av| 久久精品国产一区二区三| 亚洲一区二区视频在线观看| 欧美午夜美女看片| 亚洲一区黄色| 亚洲视频久久| 国产精品毛片一区二区三区| 亚洲综合首页| 亚洲天堂网在线观看| 欧美性事在线| 午夜性色一区二区三区免费视频| 中国成人黄色视屏| 国产精品劲爆视频| 午夜精品久久久| 亚洲欧美日韩专区| 国产日韩欧美在线一区| 欧美专区福利在线| 欧美综合激情网| 精品福利av| 欧美搞黄网站| 欧美freesex交免费视频| 亚洲精品一区二区三区福利| 亚洲人成欧美中文字幕| 欧美精品一区二| 亚洲淫片在线视频| 亚洲一区免费观看| 国产亚洲高清视频| 久久婷婷国产麻豆91天堂| 久久综合网hezyo| 亚洲精品一区在线观看| 亚洲精选大片| 国产精品亚洲综合色区韩国| 久久精品1区| 欧美mv日韩mv国产网站| 99精品久久免费看蜜臀剧情介绍| 亚洲乱码一区二区| 国产精品日本一区二区| 久久久久久久久久久久久女国产乱 | 亚洲国产导航| 日韩午夜剧场| 国产伊人精品| 亚洲丰满少妇videoshd| 欧美另类亚洲| 亚洲天堂成人| 久久不见久久见免费视频1| 91久久午夜| 亚洲视频在线观看视频| 激情婷婷欧美| 日韩视频一区二区在线观看| 国产视频精品va久久久久久| 欧美大尺度在线| 欧美视频在线观看一区| 久久精品一区蜜桃臀影院| 欧美88av| 久久精品二区亚洲w码| 欧美成人免费全部观看天天性色| 亚洲一区二区黄| 久久久成人网| 亚洲一区二区免费视频| 午夜国产精品影院在线观看| 亚洲日韩第九十九页| 亚洲欧美日韩一区二区| 亚洲韩国一区二区三区| 亚洲在线视频观看| 亚洲全部视频| 性色av一区二区三区| 99视频精品全国免费| 久久riav二区三区| 一本一本久久a久久精品综合麻豆| 午夜视频在线观看一区二区三区| 亚洲精品综合精品自拍| 欧美一级视频| 亚洲午夜一区| 裸体歌舞表演一区二区 | 亚洲深夜福利| 亚洲精品免费电影| 久久国产天堂福利天堂| 亚洲图片你懂的| 欧美14一18处毛片| 久久久久国产精品一区| 国产精品看片资源| 亚洲国产精品久久91精品| 国内外成人免费激情在线视频| 99视频在线观看一区三区| 亚洲七七久久综合桃花剧情介绍| 久久99在线观看| 欧美一区二区三区久久精品茉莉花| 噜噜噜躁狠狠躁狠狠精品视频 | 久久嫩草精品久久久精品| 亚洲欧美日韩成人| 欧美精品久久99| 亚洲大胆av| 在线精品一区| 久久精品91久久久久久再现| 亚洲欧美日韩国产精品| 欧美日韩一区二区三区在线看| 欧美国产精品一区| 影音先锋中文字幕一区| 午夜精品久久久久久久久久久久久 | 亚洲在线一区二区三区| 日韩一二三区视频| 久久夜色精品国产亚洲aⅴ | 亚洲一区二区三区精品在线| 欧美精品xxxxbbbb| 亚洲国产成人av好男人在线观看| 狠狠色综合一区二区| 欧美制服丝袜| 久久久久国产一区二区| 韩日精品视频|