【大话设计模式】—— 模板方法模式

【大话设计模式】—— 模板方法模式

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

一、概念

  上一篇文章刚刚讲了【大话设计模式】—— 原型模式,原型模式主要是通过Clone()方法,创建新的对象,免去了初始化的过程。模板方法模式也特别会“偷工减料”,把不变的行为搬移到超类,去除子类中的反复代码,将代码的复用优势展现的淋漓尽致。它为我们提供了特定的结构和样式,我们仅仅需关心填充数据内容就好,省心啊~

  以下让我们来看一下它的准确定义:

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

二、UML图

抽象类(AbstractClass):

1)定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。2)定义并实现了一个模板方法,这个模板方法通常是一个详细的方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在对应的抽象操作中,推迟到子类实现。


详细类(ConcreteClass):

1)实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑在组成步骤。

2)每个抽象模板角色都能够有随意多个详细模板角色与之相应,而每个详细模板角色都能够给出这些抽象方法的不同实现,从而使得顶级逻辑的实现各不同样。

【大话设计模式】—— 模板方法模式

三、实例解析

  近期《分手大师》和《爸爸回来了》炒的非常厉害,当然这也引发了部分观众对当中男女主人公的好奇心,当然也包含我。。。不少的訪谈节目大大剖析了国民男神—小鹏哥,无敌“贱”—邓超的感情经历。经本人常年研究发现,非常多男名人追老婆的步骤差点儿相同:1.一见钟情(我猜邓超说不定是“贱”。。。)2.两情相悦 3.喜结连理(走进了“坟墓里”,然后就没有然后了~),可是他们追求嫂夫人的方式却各不同样。这正迎合了模板方法模式,定义了一个追求的骨架,详细的步骤因人而异。

  以下请赞赏代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication13
{
    class Program
    {
        //client代码
        static void Main(string[] args)
        {
            Console.WriteLine("李小鹏哥哥的求婚历程:");
            ChasingGirl Lxp = new Lxp();
            Lxp.Part1();
            Lxp.Part2();
            Lxp.Part3();

            Console.WriteLine("邓超哥哥的求婚历程:");
            ChasingGirl Dc = new Dc();
            Dc.Part1();
            Dc.Part2();
            Dc.Part3();

            Console.Read();
        }
    }


   
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication13
{
    
        //怎样追女生呢?
        class ChasingGirl
        {
            //追女第一步 
            public void Part1()
            {
                Console.WriteLine("一见钟情");
                Console.WriteLine("详细措施:" + Measures1());
            }
            protected virtual string Measures1()
            {
                return "";
            }

            //追女第二步  
            public void Part2()
            {
                Console.WriteLine("两情相悦");
                Console.WriteLine("详细措施:" + Measures2());
            }
            protected virtual string Measures2()
            {
                return "";
            }

            //追女第三步
            public void Part3()
            {
                Console.WriteLine("喜结连理");
                Console.WriteLine("详细措施:" + Measures3());
            }
            protected virtual string Measures3()
            {
                return "";
            }


        }
    
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication13
{
    //李小鹏追老婆的详细方式

    class Lxp : ChasingGirl
    {
        protected override string Measures1()
        {
            return "2003世锦赛3块金牌,不只为了国家,也为了爱情";
        }
        protected override string Measures2()
        {
            return "为了爱情苦学英语,请英语老师补课,注冊了MSN,每天都与安琦相约在网上,用英语聊天。";
        }
        protected override string Measures3()
        {
            return "2010年6月3日,李小鹏与李安琪结束七年爱情长跑,迈入婚姻的殿堂";
        }
    }

}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication13
{
    //邓超追老婆的详细方式
    class Dc : ChasingGirl
    {
        protected override string Measures1()
        {
            return "共同出演电视剧《幸福像花儿一样》,有缘千里来相会";
        }
        protected override string Measures2()
        {
            return "戏里“对手”戏外相知 ,有开心,也有小别扭";
        }
        protected override string Measures3()
        {
            return "情人节,送礼物,有情人终成眷属";
        }
    }
}

追求历程:

【大话设计模式】—— 模板方法模式

四、总结

  当我们要完毕某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更具体的层次上的实现可能不同一时候,我们通常考虑用模板方法模式来处理。

  模板方法避免了子类中不变行为和可变行为的混合,帮助子类摆脱反复不变行为的纠缠。

  看到模板方法模式,让我心中小感慨了一下。从技术的角度看,它符合开闭原则,提高了编程效率;从生活角度来看,儿子继承老子给的模板,也是父爱的一种表现吧。毕竟我们的起点是建立在家庭基础之上的。可是父类却没有独裁,没有限制我们后来的发展,给了我们展示自我,突破自我的机会(也就是后来详细实现的步骤延迟到了子类),感觉老爸真的非常无私,非常伟大!

  尽管父亲节已过,但愿祝福的不算太晚。祝全天下的爸爸,父亲节快乐,身体健康!当然也包含给予我们父爱的米老师,谢谢您!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118260.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 抽象工厂设计模式例题_什么是抽象工厂模式

    抽象工厂设计模式例题_什么是抽象工厂模式定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。类型:创建类模式类图:抽象工厂模式与工厂方法模式的区别       抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽

    2022年10月29日
    0
  • 【OC加强】辛格尔顿和[NSFileManager defaultMagager]以及其他设计模式

    【OC加强】辛格尔顿和[NSFileManager defaultMagager]以及其他设计模式

    2022年1月4日
    35
  • 十三、外观模式—— 简化接口 #和设计模式一起旅行#

    我不想成为上帝或英雄,只想成为一棵树,为岁月而生长,不伤害任何人。 ——米沃什故事背景在英国体验了康桥的魅力,我挥一挥衣袖,不带走一片云彩,但是 英国的天空没有留下我的痕迹,但我曾去过。哈哈!从英国到法国,在浪漫的巴黎,我和设计模式MM感受到这个城市别样的风景,很是吸引人,我们决定在这里待一段时间在走。于是去政府部门办理一些手续,本来以为会花费很多时间的,因为之前办…

    2022年2月27日
    40
  • 设计模式—工厂方法

    设计模式—工厂方法

    2022年1月18日
    49
  • 常用设计模式总结

    常用设计模式总结设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,是可复用面向对象软件的基础。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中…

    2022年7月16日
    12
  • JAVA设计模式之门面模式(外观模式)[通俗易懂]

    医院的例子  现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统。如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。  首先病人必须先挂号,然后门诊。如果医生要求化验,病人必

    2022年3月11日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号