前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式- 模板方法模(Template Method Pattern)

设计模式- 模板方法模(Template Method Pattern)

作者头像
易兒善
发布2019-05-13 19:13:02
4650
发布2019-05-13 19:13:02
举报
文章被收录于专栏:挖坑填坑挖坑填坑

定义

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

C#例子

代码语言:javascript
复制
    /// <summary>
    /// 模板
    /// </summary>
    public abstract class AbstractClass
    {
        /// 子类需要实现此方法
        protected abstract int _count();
        protected abstract int _add();
        /// <summary>
        /// 一个算法,或者一个过程。
        /// </summary>
        /// <param name="input"></param>
        public void Count(int input) {
            var result = this._count()*input+_add()-20;
            Console.WriteLine(result);
        }
    }
    /// <summary>
    /// 实现10倍+100
    /// </summary>
    public class ConcreteClass10 : AbstractClass
    {
        protected override int _add()
        {
            return 100;
        }

        protected override int _count()
        {
            return 10;
        }
    }
    /// <summary>
    /// 实现20倍+2
    /// </summary>
    public class ConcreteClass20 : AbstractClass
    {
        protected override int _add()
        {
            return 2;
        }

        protected override int _count()
        {
            return 20;
        }
        
    }

模板方法模式参与者:

  • AbstractClass:定义一个模板,其子类将重定义_count和_add操作。
  • ConcreteClass*:实现_count和_add以完成算法中与特定子类相关的内容。

模板方法模式适用情形:

  • 一次性实现一个算法的不变部分,并将可变的行为留给子类来实现。
  • 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
  • 控制子类扩展。模板方法只允许在特定点进行扩展,而模板部分则是稳定的。

模板方法模式特点:

  • TemplateMethod模式是一种非常基础性的设计模式,在面向对象系统中大量应用。它用最简洁的机制(基础、多态)为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
  • 在具体实现方面,被TemplateMethod调用的虚方法可以具有实现,也可以没有任何实现(抽象方法或虚方法)。但一般推荐将它们设置为protected方法使得只有子类可以访问它们。
  • 模板方法模式通过对子类的扩展增加新的行为,符合“开闭原则”。

其他

源码地址

dotnet-design-patterns

其他设计模式

23种设计模式

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.04.30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义
  • C#例子
  • 模板方法模式参与者:
  • 模板方法模式适用情形:
  • 模板方法模式特点:
  • 其他
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档