• <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++ 高級(jí)} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}

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

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

            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è)抽象類,將部分邏輯以具體方法以及具體構(gòu)造子的形式實(shí)現(xiàn),然后聲明一些抽象方法來迫使子類實(shí)現(xiàn)剩余的邏輯。不同的子類可以以不同的方式實(shí)現(xiàn)這些抽象方法,從而對(duì)剩余的邏輯有不同的實(shí)現(xiàn)。這就是模版方法模式的用意。

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

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

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

            模版方法

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

            基本方法

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

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

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

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

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

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計(jì)

            • 隨筆 - 461
            • 文章 - 4
            • 評(píng)論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1807503
            • 排名 - 5

            最新評(píng)論

            閱讀排行榜

            91精品免费久久久久久久久| 99久久综合国产精品二区| 四虎影视久久久免费| 久久热这里只有精品在线观看| 久久久久久综合网天天| 久久99精品久久久久久hb无码| 久久精品这里热有精品| 一本色道久久88综合日韩精品 | 久久天天躁狠狠躁夜夜2020| 2020国产成人久久精品| 久久精品免费一区二区三区| 一级女性全黄久久生活片免费 | 一本久久a久久精品亚洲| 曰曰摸天天摸人人看久久久| 亚洲精品高清国产一线久久| 久久久WWW成人免费精品| 狠狠88综合久久久久综合网 | 2021国内久久精品| 精品国产婷婷久久久| 99re久久精品国产首页2020| 久久人人爽人爽人人爽av| 国产高潮国产高潮久久久91 | 国产国产成人久久精品| 久久99国产综合精品| 国内精品久久久久影院老司 | 国内精品久久久久久久久| 久久精品国产亚洲av高清漫画| 无码八A片人妻少妇久久| 久久久久国色AV免费看图片| 国产精品免费久久久久影院| 久久免费高清视频| 色偷偷888欧美精品久久久| 91精品国产综合久久精品| 久久夜色精品国产噜噜噜亚洲AV| 色天使久久综合网天天| 久久亚洲色一区二区三区| 亚洲精品97久久中文字幕无码| 伊人色综合久久天天网| 久久久久久曰本AV免费免费| 国产精品99久久久精品无码| 777午夜精品久久av蜜臀|