【C#设计模式-模板模式】

一.定义:在一个抽象类中定义一个操作中的算法骨架(对应于生活中的大家下载的模板),而将一些步骤延迟到子类中去实现(对应于我们根据自己的情况向模板填充内容)。模板方法使得子类可以不改变一个算法的结构前提下,重新定义算法的某些特定步骤,模板方法模式把不变行为搬到超类中,从而去除了子类中的重复代码。

二.实现:引用生活中上班的例子,员工上班遵循前往上班目的地,上班打卡,然后执行自己的工作,最后下班打卡的这样一个流程。

/// <summary>
    /// 抽象上班模板
    /// </summary>
    public abstract class working
    {
        // 模板方法,不要把模版方法定义为Virtual或abstract方法,避免被子类重写,防止更改流程的执行顺序
        public void Init(string name)
        {
            this.gotocompany(name);
            this.clockin(name);
            this.workings(name);
            this.offduty(name);
        }

        /// <summary>
        /// 去公司
        /// </summary>
        public abstract void gotocompany(string name);

        /// <summary>
        /// 打卡
        /// </summary>
        private void clockin(string name)
        {
            Console.WriteLine("员工:" + name + "上班打卡");
        }

        /// <summary>
        /// 开展自己的工作
        /// </summary>
        /// <param name="name"></param>
        public abstract void workings(string name);

        /// <summary>
        /// 下班打卡
        /// </summary>
        /// <param name="name"></param>
        private void offduty(string name)
        {
            Console.WriteLine("员工:" + name + "下班班打卡");
        }
    }
 /// <summary>
    /// 员工A
    /// </summary>
    public class employeeA:working
    {
        public override void gotocompany(string name)
        {
            Console.WriteLine(name+"员工做地图前往公司");
        }

        public override void workings(string name)
        {
            Console.WriteLine(name+"员工开展程序编码工作");
        }
    }
    /// <summary>
    /// C#设计模式-模板方法模式
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            working w = new employeeA();
            w.Init("A");
        }
    }

模板方法模式中涉及了两个角色:
抽象模板角色(Vegetable扮演这个角色):定义了一个或多个抽象操作,以便让子类实现,这些抽象操作称为基本操作。
具体模板角色(ChineseCabbage和Spinach扮演这个角色):实现父类所定义的一个或多个抽象方法。
优点:实现了代码复用,能够灵活应对子步骤的变化,符合开放-封闭原则
缺点:因为引入了一个抽象类,如果具体实现过多的话,需要用户或开发人员需要花更多的时间去理清类之间的关系。
在.NET中模板方法的应用也很多,我们在开发自定义的Web控件或WinForm控件时,我们只需要重写某个控件的部分方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值