• <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 夢在天涯 閱讀(544) 評論(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

            搜索

            •  

            積分與排名

            • 積分 - 1804159
            • 排名 - 5

            最新評論

            閱讀排行榜

            国产一级持黄大片99久久| 嫩草影院久久99| 久久亚洲精品成人av无码网站| 欧美一区二区三区久久综合| 久久精品国产一区| 亚洲国产精品一区二区三区久久| 99久久精品免费看国产一区二区三区| 久久精品99久久香蕉国产色戒| 色综合久久久久综合99| 国产精品久久永久免费| 7777精品伊人久久久大香线蕉| 久久久久无码精品国产不卡| 久久亚洲高清综合| 久久综合丝袜日本网| 国产毛片欧美毛片久久久| 国产香蕉97碰碰久久人人| 99久久无码一区人妻a黑| 中文字幕精品无码久久久久久3D日动漫 | 欧美激情精品久久久久久久| 97久久超碰国产精品2021| 香蕉久久久久久狠狠色| 91精品久久久久久无码| 97久久精品无码一区二区天美| 国产精品久久久久久久久久影院 | 国内精品九九久久久精品| 久久精品中文字幕一区| 色婷婷噜噜久久国产精品12p | 精品伊人久久大线蕉色首页| 久久人人超碰精品CAOPOREN| 国产精品gz久久久| 欧美精品一区二区精品久久 | 久久成人18免费网站| 久久久青草久久久青草| 久久久91精品国产一区二区三区| 看久久久久久a级毛片| 亚洲女久久久噜噜噜熟女| 日韩欧美亚洲综合久久| 久久久久亚洲精品日久生情| 亚洲va久久久久| 久久久一本精品99久久精品88| 国内精品久久久久影院薰衣草|