[学习笔记:设计模式] 14_模板方法模式

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


模板方法模式包括以下角色:

AbstractClass(抽象类): 定义了一个或多个抽象操作,以便让子类实现。

ConcreteClass(具体子类): 实现父类所定义的一个或多个抽象方法。


举例
请人吃饭模板:点单、吃饭、结账

- 抽象类

public abstract class AbstractClass
    {
        //模板方法(定义了基本方法的执行次序)
        public void TemplateMethod()
        {
            PrimitiveOperation_1();
            PrimitiveOperation_2();
            PrimitiveOperation_3();
        }

        //基本方法-具体方法(直接在父类中实现)
        public void PrimitiveOperation_1()
        {
            Console.WriteLine("点单");
        }

        //基本方法-抽象方法(在子类中必须实现)
        public abstract void PrimitiveOperation_2();

        //基本方法-钩子方法(在子类中选择实现)
        public virtual void PrimitiveOperation_3() { }
    }

- 具体子类

public class ConcreteClass : AbstractClass
    {
        public override void PrimitiveOperation_2()
        {
            Console.WriteLine("吃饭");
        }

        //可选择是否重写来执行该操作
        public override void PrimitiveOperation_3()
        {
            Console.WriteLine("结账");
        }
    }

- 客户类

static void Main(string[] args)
        {
            AbstractClass abstractClass = new ConcreteClass();
            abstractClass.TemplateMethod();
        }

总结:抽象类中首先定义模板方法,决定了基本方法的执行次序,同时可以选择各个基本方法的类型,具体方法直接在抽象类中实现,抽象方法留到子类中实现,钩子方法则在抽象类中空实现,以便子类自行选择是否实现。

ps:钩子方法还可通过“挂钩”方法来实现,则在模板方法中加个判断是否执行钩子方法,而这个判断可以在子类中决定。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值