變與不變  變化——是軟件設計的永恒主題,如何管理變化帶來的復雜性?設計模 " /> 碰超成人在线公开免费视频,亚瑟天堂久久一区二区影院,在线免费看a

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

C#面向對象設計模式縱橫談:Template Method 模板方法

  無處不在的Template Method

  如果你只想掌握一種設計模式,那么它就是

          -----Template Method!

  變與不變

  變化——是軟件設計的永恒主題,如何管理變化帶來的復雜性?設計模式的藝術性和復雜度就在于如何分析,并發(fā)現(xiàn)系統(tǒng)中的變化點和穩(wěn)定點,并使用特定的設計方法來應對這種變化。

image image

  動機(Motivation)

  在軟件構建過程中,對于某一項任務,它常常有穩(wěn)定的整體操作結構,但各個子步驟卻有很多改變的需求,或者由于固有的原因(比如框架與應用之間的關系)而無法和任務的整體結構同時實現(xiàn)。如何在確定穩(wěn)定操作結構的前提下,來靈活應對各個子步驟的變化或者晚期實現(xiàn)需求?

  意圖(Intent)

  定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。Template Method使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

                                                            ——《設計模式》GoF

  例說Template Method應用

  下面是汽車測試軟件的例子

image

image

  具體實現(xiàn)

image

  客戶程序

image

  這里new的地方可以根據(jù)需要用創(chuàng)建型的設計模式來設計。

  這里我們把抽象類里面的抽象方法寫為了public,我建議對于虛方法或者抽象方法,一般寫為protected;對于非虛的方法或者非抽象的方法,才寫為public。因為如果是公有的虛方法,它就擔當了兩個不同方面的責任。只要設置了一個虛方法,那就意味著這是一個擴展點。如果是public方法,也就是客戶程序可以直接訪問這個函數(shù),但是虛方法是不具有外界訪問的資質的。因此我們推薦虛方法都用protected來修飾。

  結構(Structure)

image

  AbstractClass對應例子中的Vehicle抽象類,TemplateMethod對應例子中的Test方法,PrimitiveOperation等虛方法對應Startup、Run等虛方法,ConcreteClass對應HongqiCar具體類。

  Template Method模式的幾個要點

  Template Method模式是一種非常基礎性的設計模式,在面向對象系統(tǒng)中有著大量的應用。它用最簡潔的機制(虛函數(shù)的多態(tài)性)為很多應用程序框架提供了靈活的擴展,是代碼復用方面的基本實現(xiàn)結構。除了可以靈活應對子步驟的變化外,“Don't call me, let me call you(不要調用我,讓我來調用你)”的反向控制結構是Template Method的典型應用

  在具體實現(xiàn)方面,被Template Method調用的虛方法可以具有實現(xiàn),也可以沒有任何實現(xiàn)(抽象方法、純虛方法),但一般推薦將它們設置為protected方法。

  .NET架構中的Template Method應用

  一個簡單的Windows窗體應用

image

image

  這里OnPaint是一個虛方法的子步驟,這就是一個Template Method設計模式。如果我們不去重寫這個OnPaint方法,它就有一個基本的默認實現(xiàn),畫一個空窗體。這里我們并沒有調用OnPaint方法,而是Application的Run會進入Windows的消息循環(huán)結構,Paint就是一個消息。當我們移動一下窗口都會導致Paint事件的發(fā)生,并導致OnPaint函數(shù)的調用,這就是一種反向調用。當然,還有很多其他的子步驟可以提供擴展點,例如OnClose等,很多以On開頭的全部都是Template Method模式的虛方法。

image

  這個里面內容很復雜,它并不是用一個Template Method在里面調用所有的子步驟方法,它實際上是把整體的Template Method方法置于了一個消息循環(huán)的結構里面,我們可以把消息循環(huán)的結構看做模板方法里面的TemplateMethod公有非虛方法。

it知識庫C#面向對象設計模式縱橫談:Template Method 模板方法,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 在线视频一区二区三区在线播放 | 旧里番ovaの催○セイ活指导 | 妖精视频免费高清观看 | 亚州三级久久电影 | 日本内射精品一区二区视频 | 免费视频久久只有精品 | 年轻的朋友4在线看中文字幕 | 久久精品一本到99热 | 中文无码乱人伦中文视频播放 | 人妻免费视频公开上传 | 久久青青无码AV亚洲黑人 | 琪琪电影午夜理论片YY6080 | 性欧美xxxxporn | 狠狠操天天操夜夜操 | 欧美一级久久久久久久久大 | ass女人下部欣赏 | 伊人久久99热这里只有精品 | 亚欧成人毛片一区二区三区四区 | 国产午夜视频在永久在线观看 | 良家人妻无码专区九色颜射 | 久草高清在线 | 国产人妻精品久久久久久很牛 | 亚洲XXX午休国产熟女屁 | 亚洲精品一卡二卡三卡四卡2021 | 亚洲综合日韩中文字幕v在线 | 久久精品热播在线看 | 91区国产福利在线观看午夜 | 寂寞夜晚视频在线观看 | 天天影视香色欲综合网 | 国产精品一区二区制服丝袜 | 大胸美女洗澡扒奶衣挤奶 | 日韩人妻少妇一区二区三区 | 嫩草电影网嫩草影院 | 99精品影院 | 国产精品99亚发布 | 国产午夜精品理论片免费观看 | 息与子在线交尾中文字幕 | 久久久99精品成人片中文 | 亚洲AV噜噜狠狠网址蜜桃尤物 | 中文在线日韩亚洲制服 | 日本最新在线不卡免费视频 |