<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的Blog我做主^_^

    走向一條通往JAVA的不歸路...

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      64 隨筆 :: 68 文章 :: 77 評論 :: 0 Trackbacks
    行為模式:

    行為型模式涉及到算法和對象間職責(zé)的分配。將注意力從控制流轉(zhuǎn)移到對象間的聯(lián)系方式上來。

           行為模式分為:行為類模式行為對象模式行為類模式使用繼承機制在類間分派行為行為對象模式使用對象復(fù)合而不是繼承。

    Template Method模板方法模式

           Template Method模板方法模式介紹:

           Template Method模板方法模式是一種行為型模式,具體點說是行為類型模式。主要解決在軟件構(gòu)建過程中,對于某一項任務(wù),常常有穩(wěn)定的整體操作結(jié)構(gòu),但各個子步驟卻有很多改變的需求,或者由于固有的原因而無法和任務(wù)的整體結(jié)構(gòu)同時實現(xiàn)。

           GoF《設(shè)計模式》中說道:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。Template Method使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟

           Template Method模式的結(jié)構(gòu)


           定義場景

           單看結(jié)構(gòu)不好理解,我們來結(jié)合程序進行分析。現(xiàn)在定義一個場景:我想大家都玩過極品飛車(我相當喜歡)。游戲中有很多的汽車,但是從操作角度看大同小異。無非是起步(StartUp)、行駛(Run)、停車(Stop)等等行為。汽車行駛的動作之間可能存在著差異,例如:手動檔和自動檔,但是接口是一樣的,換句話說,基本都是這幾個動作。結(jié)合Template Method模式講就是在這個程序中,結(jié)構(gòu)(對汽車的操作)是穩(wěn)定的,但是變化在于各個子步驟(操作行為的具體實現(xiàn))。

           程序?qū)崿F(xiàn)與結(jié)構(gòu)分析

           首先我們需要一個汽車的抽象類(結(jié)構(gòu)圖中的AbstractClass)

           public abstract class AbstractCar

        {

            protected abstract string StartUp();

            protected abstract string Run();

            protected abstract string Stop();

     

            public void DriveOnTheRoad()

            {

                Console.WriteLine(StartUp());

                Console.WriteLine(Run());

                Console.WriteLine(Stop());

            }

    }

    在這段代碼中,抽象方法StartUp、Run、Stop叫做primitive operation(原語操作),它們是在子類中的擴展點,例如我們要編寫一輛BORA的實現(xiàn),在他繼承AbstractCar后,可以在這幾個primitive operation上進行自己個步驟的實現(xiàn)。

    AbstractCar中的DriveOnTheRoad方法叫做template method(模板方法),template method用primitive operation定義一個算法,是相對穩(wěn)定的部分。(子類中重新定義primitive operation)。

        然后我們要實現(xiàn)一輛BORA汽車(結(jié)構(gòu)圖中的ConcreteClass)

        public class BORA : AbstractCar //繼承

        {

            protected override string StartUp()

            {

                return "BORA is StartUp";

            }

     

            protected override string Run()

            {

                return "BORA is Running";

            }

     

            protected override string Stop()

            {

                return "BORA is Stoped";

            }

    }

    接下來我們進行客戶程序的實現(xiàn)

    class Program

        {

            static void Main(string[] args)

            {

                ClientApp.Drive(new BORA());

                Console.Read();

            }

    }

    public class ClientApp

        {

            public static void Drive(AbstractCar car)

            {

                car.DriveOnTheRoad();

            }

    }

    運行結(jié)果如下:

    BORA is StartUp

    BORA is Running

    BORA is Stoped

       

    Template Method要點

    1、  Template Method模式是一種非常基礎(chǔ)性的設(shè)計模式,在面向?qū)ο笙到y(tǒng)中有著大量的應(yīng)用。它用最簡潔的機制(虛函數(shù)的多態(tài)性)為了很多應(yīng)用程序框架提供了靈活的擴展點,是代碼復(fù)用方面的基本實現(xiàn)結(jié)構(gòu)。

    2、  除了可以靈活應(yīng)對子步驟的變化外,“Don't call me.Let me Call you”的反向控制結(jié)構(gòu)是Template Method的典型應(yīng)用。“Don’t call me.Let me Call you”是指一個父類調(diào)用一個子類的操作,而不是相反。

    3、  在具體實現(xiàn)方面,被Template Method調(diào)用的虛方法可以具有實現(xiàn),也可以沒有任何實現(xiàn)(抽象方法、純虛方法),但一般推薦將它們設(shè)置為protected方法。可以沒有具體實現(xiàn)的方法應(yīng)該稱為hook operation(鉤子操作),提供了缺省的行為,子類可以在必要時進行擴展。

    4、  盡量減少primitive operation,因為需要重新定義的操作越多,客戶程序就越長

    posted on 2008-05-08 17:39 java_蟈蟈 閱讀(195) 評論(0)  編輯  收藏 所屬分類: 設(shè)計模式

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产成人精品激情| 亚洲激情在线视频| 国产亚洲一卡2卡3卡4卡新区| 亚洲一卡一卡二新区无人区| 亚洲免费观看在线视频| 亚洲综合综合在线| 午夜福利不卡片在线播放免费| 久久久亚洲欧洲日产国码农村| 久99久无码精品视频免费播放| 亚洲国产精品成人网址天堂| 免费国产va视频永久在线观看| 可以免费观看一级毛片黄a| 国产亚洲成在线播放va| 亚洲欧洲一区二区三区| 99久久精品毛片免费播放| 亚洲国产精品无码专区在线观看| 中文在线观看永久免费| 亚洲国产一区国产亚洲| 久久精品免费一区二区| 亚洲精品123区在线观看| 欧洲美熟女乱又伦免费视频| 免费国产va在线观看| 国产V亚洲V天堂无码| 成人在线免费看片| 亚洲jizzjizz少妇| 九月丁香婷婷亚洲综合色| 18禁无遮挡无码国产免费网站| 亚洲午夜一区二区电影院| 免费看美女被靠到爽的视频| 九九综合VA免费看| 亚洲视频免费观看| 在线看片无码永久免费aⅴ| 国产成人无码免费网站| 亚洲国产日韩在线| 亚洲av无码国产精品色在线看不卡| 日韩毛片一区视频免费| 久久精品国产亚洲AV嫖农村妇女| 一色屋成人免费精品网站| 二级毛片免费观看全程| 亚洲第一成年人网站| 亚洲AV中文无码乱人伦|