设计模式之模板方法模式

定义

模板方法是一种行为设计模式,它在父类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。

模板是对多种事物的结构、形式、行为的模式化总结,而模板方法模式(Template Method)则是对一系列类行为(方法)的模式化。我们将总结出来的行为规律固化在基类中,对具体的行为实现则进行抽象化并交给子类去完成,如此便实现了子类对基类模板的套用。

组成

模板类(父类)

定义最终调用方法和抽象方法,子类实现抽象方法

具体实现类(子类)

实现抽象方法

模式应用的现实场景

定制表格
设计者先将所有需要填写的信息头(字段名)抽取出来,再将它们整合在一起成为一种既定格式的表格,最后让填表人按照这个标准化模板去填写自己特有的信息,而不必为书写内容、先后顺序、格式而感到困扰。

代码示例

public abstract class TeldEmployeeGoHomeAbstract
{
    /// <summary>
    /// 下班
    /// </summary>
    public abstract void ComeOffWork();

    /// <summary>
    /// 通勤
    /// </summary>
    public abstract void Commute();

    public  void GoHome() 
    {
        this.ComeOffWork();
        this.Commute();
        Console.WriteLine($"{this}=>我到家了");
    }
}
public class DefaultEmployeeGoHomeImpl : TeldEmployeeGoHomeAbstract
{
    public override void ComeOffWork()
    {
        Console.WriteLine("我不下班..");
    }

    public override void Commute()
    {
        Console.WriteLine("我坐班车..");
    }
}

public class MaiweiEmployeeGoHomeImpl : TeldEmployeeGoHomeAbstract
{
    public override void ComeOffWork()
    {
        Console.WriteLine("我5点下班");
    }

    public override void Commute()
    {
        Console.WriteLine("我座11号线=>1号线=>646公交");
    }
}

public class TelaiDianEmployeeGoHomeImpl : TeldEmployeeGoHomeAbstract
{
    public override void ComeOffWork()
    {
        Console.WriteLine("我6点下班");
    }

    public override void Commute()
    {
        Console.WriteLine("我座382公交直达");
    }
}

调用和输出

    class Program
    {
        static void Main(string[] args)
        {
            TeldEmployeeGoHomeAbstract defaultemployee = new DefaultEmployeeGoHomeImpl();
            defaultemployee.GoHome();
            TeldEmployeeGoHomeAbstract maiwei = new MaiweiEmployeeGoHomeImpl();
            maiwei.GoHome();
            TeldEmployeeGoHomeAbstract telaid = new TelaiDianEmployeeGoHomeImpl();
            telaid.GoHome();
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模板方法设计模式是一种行为设计模式,它定义了一个算法的骨架,将一些步骤的实现延迟到子类中。这种模式可以确保算法的结构保持不变,但允许子类提供特定的实现细节。在C++中,模板方法设计模式可以通过使用虚函数和继承来实现。 在给出的引用中,我们可以看到一个名为CoffeineBeverage的类,它定义了一个prepare_recipe()方法,并在内部调用了其他几个私有方法。这个类是一个基类,可以被子类继承并重写其中的方法。 具体来说,模板方法设计模式的关键是将算法的骨架定义在基类中,而将可变的实现细节留给子类去实现。在这个例子中,prepare_recipe()方法是算法的骨架,而brew()和add_condiments()方法则是可变的实现细节。 通过将brew()和add_condiments()方法定义为虚函数,基类CoffeineBeverage允许子类去重写这些方法以提供自己的实现。这样,当调用prepare_recipe()方法时,实际执行的是子类中重写后的方法。 使用模板方法设计模式的好处是可以提高代码的复用性和可扩展性。算法的骨架在基类中只需要定义一次,而具体的实现细节可以在不同的子类中灵活变化。 总结起来,C++中的模板方法设计模式通过定义一个算法的骨架并将可变的实现细节留给子类去实现,可以提供代码的复用性和可扩展性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C++设计模式模板方法模式](https://blog.csdn.net/Long_xu/article/details/127118813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [C++设计模式-模板方法模式](https://blog.csdn.net/qq78442761/article/details/91990149)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值