變與不變  變化——是軟件設(shè)計的永恒主題,如何管理變化帶來的復(fù)雜性?設(shè)計模 " /> 五月香婷婷,日日日操,日韩精品欧美在线

中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

C#面向?qū)ο笤O(shè)計模式縱橫談:Template Method 模板方法

  無處不在的Template Method

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

          -----Template Method!

  變與不變

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

image image

  動機(jī)(Motivation)

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

  意圖(Intent)

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

                                                            ——《設(shè)計模式》GoF

  例說Template Method應(yīng)用

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

image

image

  具體實現(xiàn)

image

  客戶程序

image

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

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

  結(jié)構(gòu)(Structure)

image

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

  Template Method模式的幾個要點

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

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

  .NET架構(gòu)中的Template Method應(yīng)用

  一個簡單的Windows窗體應(yīng)用

image

image

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

image

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

it知識庫C#面向?qū)ο笤O(shè)計模式縱橫談:Template Method 模板方法,轉(zhuǎn)載需保留來源!

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

主站蜘蛛池模板: 日批免费看| 99久久精品免费看国产四区 | 亚洲精品女人久久久 | 日韩成人在线网址 | 国产精品精品视频一区二区三区 | 一区二区免费在线观看 | 精品成人69xx.xyz | 亚洲精品视频在线 | 青青草一区二区三区 | 日本中文字幕日韩精品免费 | 日韩av成人| 三级视频网站 | 国产精品一区二区三区在线 | 亚洲国产片 | 日日夜夜天天 | 免费爱爱视频 | 日韩免费1区二区电影 | 国产在线观看 | 国产精品99久久久久久www | 亚洲欧美中文日韩在线v日本 | 久久久久亚洲精品 | 国产夜恋视频在线观看 | 国产精品一卡二卡三卡 | 日日干天天干 | 国产精品久久久久久久久久久免费看 | 国产三区精品 | 日本一区二区在线视频 | 欧美日韩国产在线观看 | 亚洲欧美日韩久久 | 韩国毛片一区二区三区 | 亚洲精品国产区 | 99九九久久| 国产农村妇女精品一区 | 欧美专区在线视频 | 一区二区三区四区在线 | 免费看黄视频网站 | 精品二区| 国产精品日韩一区 | 久久久成人精品 | 国产视频亚洲视频 | 久久www免费视频 |