• <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++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

            模式設計c#--行為型--templetemethod

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

            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)模式

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

            很多人可能沒有想到,模版方法模式實際上是所有模式中最為常見的幾個模式之一,而且很多人可能使用過模版方法模式而沒有意識到自己已經使用了這個模式。模版方法模式是基于繼承的代碼復用的基本技術,模版方法模式的結構和用法也是面向對象設計的核心。

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

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

            模版方法

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

            基本方法

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

            抽象方法:一個抽象方法由抽象類聲明,由具體子類實現。在C#語言里一個抽象方法以abstract關鍵字標示出來。

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

            鉤子方法:一個鉤子方法由抽象類聲明并實現,而子類會加以擴展。通常抽象類給出的實現是一個空實現,作為方法的默認實現。(Visual FoxPro中項目向導建立的項目會使用一個AppHook類實現監視項目成員變化,調整系統結構的工作。)鉤子方法的名字通常以do開始。

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

            公告

            EMail:itech001#126.com

            導航

            統計

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

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804603
            • 排名 - 5

            最新評論

            閱讀排行榜

            久久国产精品一区| 国产精品中文久久久久久久| 亚洲国产天堂久久久久久| 精品久久久无码中文字幕天天| 久久久久久久久久久久中文字幕| 无码国内精品久久综合88| 看全色黄大色大片免费久久久| 久久精品亚洲乱码伦伦中文| 久久国产视屏| 久久丝袜精品中文字幕| 日韩久久久久中文字幕人妻| 久久伊人亚洲AV无码网站| 一级a性色生活片久久无少妇一级婬片免费放| 久久播电影网| 久久无码专区国产精品发布| 午夜精品久久久久久久久| 精品熟女少妇av免费久久| 久久综合久久综合久久| 日产久久强奸免费的看| 亚洲精品高清国产一线久久| 久久精品国产久精国产思思| 狠狠色丁香婷婷久久综合不卡| 久久久久国产| 久久影院综合精品| 久久播电影网| 人人狠狠综合久久88成人| 日本福利片国产午夜久久| 国产免费久久精品99re丫y| 国产午夜福利精品久久2021| 久久久久亚洲AV成人网| 久久综合九色综合网站| 激情久久久久久久久久| 久久精品国产亚洲αv忘忧草| 国产精品久久久久久久| 亚洲欧洲中文日韩久久AV乱码| 亚洲av日韩精品久久久久久a| 久久综合九色综合久99| 狠狠色综合网站久久久久久久高清 | 久久精品国产精品亚洲| 伊人久久综合精品无码AV专区 | 亚洲欧美伊人久久综合一区二区|