模板方法模式 -- 大话设计模式

本文介绍了模板方法模式的概念及其应用场景,并通过一个生动的例子——把不同大小的动物放入冰箱的过程——展示了如何利用该模式来减少代码重复并提高代码复用性。

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

在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……

模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义改算法的某些特定步骤,例如现实生活中的简历模板、论文模板等等

模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势,提供了一个很好的代码复用平台。当我们遇到一些过程从高层次看是相同的,但有些步骤的实现可能不同,这时候我们就可以考虑使用模板方法模式了

1.把大象放到冰箱里与把企鹅放到冰箱里的区别

  打开冰箱,大象太大了!实在放不下,切吧切吧放吧~,关冰箱门;打开冰箱,把猪塞进去,关冰箱门

  定义一个抽象类,将不一样的算法定义为虚方法,让子类可以重写其方法,来定义新的特定步骤

    public abstract class AnimalTemplate
    {
        protected string _name;

        public AnimalTemplate()
        {
            this._name = "动物";
        }

        public void Operate()
        {
            Console.WriteLine("把{0}放到冰箱里面的过程:", this._name);

            this.OpenDoor();
            this.Push();
            this.CloseDoor();
        }

        public void OpenDoor()
        {
            Console.WriteLine("1.打开冰箱门");
        }

        public virtual void Push()
        {
            Console.WriteLine("2.把{0}塞进去", this._name);
        }

        public void CloseDoor()
        {
            Console.WriteLine("2.关冰箱门");
        }
    }

   定义大象和企鹅两个子类,重写push方法,各自有各自不同的放法

    public class Elephant : AnimalTemplate
    {
        public Elephant()
        {
            this._name = "大象";
        }

        public override void Push()
        {
            Console.WriteLine("2.大象太大了!实在放不下,切吧切吧放吧~");
        }
    }

    public class Penguin : AnimalTemplate
    {
        public Penguin()
        {
            this._name = "企鹅";
        }

        public override void Push()
        {
            base.Push();
        }
    }

   开启场景模拟

        static void Main(string[] args)
        {
            //把大象放到冰箱里
            AnimalTemplate elephant = new Elephant();
            elephant.Operate();

            //把企鹅放到冰箱里
            AnimalTemplate penguin = new Penguin();
            penguin.Operate();
        }

 

转载于:https://www.cnblogs.com/amywechat/p/4923119.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值