Unity学习笔记:设计模式-TEMPLATE METHOD( 模板方法)

本文深入探讨了模板方法设计模式的原理与应用。通过定义算法的骨架,将具体步骤留给子类实现,使得子类可以在不改变算法结构的情况下重定义特定步骤。适用于一次性实现算法的不变部分,并允许子类实现可变行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键骨架

对于某功能实现的大流程已经确定,但是每一个步骤可能有不同的实现。在父类中定义流程(骨架)子类负责每个步骤的具体实现。(eg:团建活动 : 住宿 开会 固定,娱乐活动自由选择)

图:

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

适用性:

•  一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

• 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是O p d y k e和J o h n s o n所描述过的“重分解以一般化”的一个很好的例子 [ O J 9 3 ] 。首先识别

现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。

• 控制子类扩展。模板方法只在特定点调用“ h o o k”操作(参见效果一节) ,这样就只允许在这些点进行扩展。

案例:(eg:团建活动 : 住宿 开会 固定,娱乐活动自由选择)

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;
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值