• <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>

            C++ Programmer's Cookbook

            {C++ 基礎(chǔ)} {C++ 高級} {C#界面,C++核心算法} {設(shè)計模式} {C#基礎(chǔ)}

            模式設(shè)計c#--行為型--templetemethod

            名稱 Template Method
            結(jié)構(gòu) o_templetemethod.bmp
            意圖 定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。Te m p l a t e M e t h o d 使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
            適用性
            • 一次性實現(xiàn)一個算法的不變的部分,并將可變的行為留給子類來實現(xiàn)。
            • 各子類中公共的行為應(yīng)被提取出來并集中到一個公共父類中以避免代碼重復(fù)。這是O p d y k e 和J o h n s o n 所描述過的“重分解以一般化”的一個很好的例子[ O J 9 3 ]。首先識別現(xiàn)有代碼中的不同之處,并且將不同之處分離為新的操作。最后,用一個調(diào)用這些新的操作的模板方法來替換這些不同的代碼。
            • 控制子類擴展。模板方法只在特定點調(diào)用“h o o k ”操作(參見效果一節(jié)),這樣就只允許在這些點進行擴展。

            Code Example
            namespace?TemplateMethod_DesignPattern
            {
            ????
            using?System;

            ????
            class?Algorithm?
            ????
            {
            ????????
            public?void?DoAlgorithm()?
            ????????
            {
            ????????????Console.WriteLine(
            "In?DoAlgorithm");
            ????????????
            ????????????
            //?do?some?part?of?the?algorithm?here
            ????????????
            ????????????
            //?step1?goes?here
            ????????????Console.WriteLine("In?Algorithm?-?DoAlgoStep1");????????????
            ????????????
            //?.?.?.?

            ????????????
            //?step?2?goes?here
            ????????????Console.WriteLine("In?Algorithm?-?DoAlgoStep2");????????????
            ????????????
            //?.?.?.?

            ????????????
            //?Now?call?configurable/replacable?part
            ????????????DoAlgoStep3();

            ????????????
            //?step?4?goes?here
            ????????????Console.WriteLine("In?Algorithm?-?DoAlgoStep4");????????????
            ????????????
            //?.?.?.?

            ????????????
            //?Now?call?next?configurable?part
            ????????????DoAlgoStep5();
            ????????}


            ????????
            virtual?public?void?DoAlgoStep3()
            ????????
            {
            ????????????Console.WriteLine(
            "In?Algorithm?-?DoAlgoStep3");????????
            ????????}


            ????????
            virtual?public?void?DoAlgoStep5()
            ????????
            {
            ????????????Console.WriteLine(
            "In?Algorithm?-?DoAlgoStep5");????????????
            ????????}

            ????}


            ????
            class?CustomAlgorithm?:?Algorithm
            ????
            {
            ????????
            public?override?void?DoAlgoStep3()
            ????????
            {
            ????????????Console.WriteLine(
            "In?CustomAlgorithm?-?DoAlgoStep3");
            ????????}


            ????????
            public?override?void?DoAlgoStep5()
            ????????
            {
            ????????????Console.WriteLine(
            "In?CustomAlgorithm?-?DoAlgoStep5");
            ????????}

            ????}


            ????
            ///?<summary>
            ????
            ///????Summary?description?for?Client.
            ????
            ///?</summary>

            ????public?class?Client
            ????
            {
            ????????
            public?static?int?Main(string[]?args)
            ????????
            {
            ????????????CustomAlgorithm?c?
            =?new?CustomAlgorithm();

            ????????????c.DoAlgorithm();

            ????????????
            return?0;
            ????????}

            ????}

            }

            模板方法(Template Method)模式

            準(zhǔn)備一個抽象類,將部分邏輯以具體方法以及具體構(gòu)造子的形式實現(xiàn),然后聲明一些抽象方法來迫使子類實現(xiàn)剩余的邏輯。不同的子類可以以不同的方式實現(xiàn)這些抽象方法,從而對剩余的邏輯有不同的實現(xiàn)。這就是模版方法模式的用意。

            很多人可能沒有想到,模版方法模式實際上是所有模式中最為常見的幾個模式之一,而且很多人可能使用過模版方法模式而沒有意識到自己已經(jīng)使用了這個模式。模版方法模式是基于繼承的代碼復(fù)用的基本技術(shù),模版方法模式的結(jié)構(gòu)和用法也是面向?qū)ο笤O(shè)計的核心。

            模版方法模式需要開發(fā)抽象類和具體子類的設(shè)計師之間的協(xié)作。一個設(shè)計師負(fù)責(zé)給出一個算法的輪廓和骨架,另一些設(shè)計師則負(fù)責(zé)給出這個算法的各個邏輯步驟。代表這些具體邏輯步驟的方法稱做基本方法(primitive method);而將這些基本法方法總匯起來的方法叫做模版方法(template method),這個設(shè)計模式的名字就是從此而來。
            ?模版方法模式中的方法

            模版方法中的方法可以分為兩大類:模版方法(Template Method)和基本方法(Primitive Method)。

            模版方法

            一個模版方法是定義在抽象類中的,把基本操作方法組合在一起形成一個總算法或一個總行為的方法。這個模版方法一般會在抽象類中定義,并由子類不加以修改地完全繼承下來。

            基本方法

            基本方法又可以分為三種:抽象方法(Abstract Method)、具體方法(Concrete Method)和鉤子方法(Hook Method)。

            抽象方法:一個抽象方法由抽象類聲明,由具體子類實現(xiàn)。在C#語言里一個抽象方法以abstract關(guān)鍵字標(biāo)示出來。

            具體方法:一個具體方法由抽象類聲明并實現(xiàn),而子類并不實現(xiàn)或置換。在C#語言里面,一個具體方法沒有abstract關(guān)鍵字。

            鉤子方法:一個鉤子方法由抽象類聲明并實現(xiàn),而子類會加以擴展。通常抽象類給出的實現(xiàn)是一個空實現(xiàn),作為方法的默認(rèn)實現(xiàn)。(Visual FoxPro中項目向?qū)Ы⒌捻椖繒褂靡粋€AppHook類實現(xiàn)監(jiān)視項目成員變化,調(diào)整系統(tǒng)結(jié)構(gòu)的工作。)鉤子方法的名字通常以do開始。

            posted on 2006-01-03 16:04 夢在天涯 閱讀(555) 評論(0)  編輯 收藏 引用 所屬分類: Design pattern

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1811117
            • 排名 - 5

            最新評論

            閱讀排行榜

            看久久久久久a级毛片| 午夜精品久久久久| 国产日韩久久久精品影院首页| 久久久WWW成人免费精品| 国产精品亚洲综合久久 | 久久久久久久波多野结衣高潮| 天天躁日日躁狠狠久久| 精品免费久久久久国产一区| 一本色道久久综合亚洲精品| 久久乐国产精品亚洲综合| 东京热TOKYO综合久久精品| 久久亚洲欧洲国产综合| 色综合久久久久| 久久99国产乱子伦精品免费| 亚洲欧洲久久久精品| 亚洲国产精品久久久久婷婷软件| 久久天天躁狠狠躁夜夜avapp| 99久久伊人精品综合观看| 人妻精品久久无码区| 久久婷婷五月综合成人D啪| 精品久久久久久无码人妻热| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 人人狠狠综合88综合久久| 91精品国产色综久久 | 久久www免费人成精品香蕉| 久久美女网站免费| 久久99久久99小草精品免视看| 激情伊人五月天久久综合| 久久综合噜噜激激的五月天| 午夜人妻久久久久久久久| 精品熟女少妇av免费久久| 久久99国产精品久久99| 国产精品久久久久久| 久久夜色tv网站| 久久99热这里只有精品国产| 久久99精品国产99久久6| 久久99精品国产麻豆婷婷| 久久久久国产精品三级网| 午夜精品久久久久久| 久久中文字幕人妻熟av女| 色88久久久久高潮综合影院|