设计模式-行为型-模板模式

模板模式(Template):

  提到模板,可能大多数人想到的是"简历模板"、"论文模板"等,比如我们要写简历时,会从网上下载一份漂亮的简历模板,其格式是固定的,我们根据自己的情况填充不同的内容。模板模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

模板模式的角色:

  

  1)模板方法(AbstractClass):定义了一个或多个抽象操作,以便让子类实现,这些抽象操作称为基本操作;

  2)模板方法的具体实现(ConcreteClass):实现父类所定义的一个或多个抽象方法。

  上图为java的UML图,我们以该例子来写我们的C#版本(玩游戏的步骤,初始化游戏-》开始游戏-》游戏结束)

1 internal class Program
 2 {
 3     private static void Main(string[] args)
 4     {
 5         Game game1 = new Cricket();
 6         game1.play();
 7         Game game2 = new Football();
 8         game2.play();
 9     }
10 }
11
12 internal abstract class Game
13 {
14     protected abstract void initialize();
15
16     protected abstract void startPlay();
17
18     protected abstract void endPlay();
19
20     //模板
21     public void play()
22     {
23         //初始化游戏
24         initialize();
25
26         //开始游戏
27         startPlay();
28
29         //结束游戏
30         endPlay();
31     }
32 }
33
34 internal class Cricket : Game
35 {
36     protected override void endPlay()
37     {
38         Console.WriteLine("Cricket Game Finished!");
39     }
40
41     protected override void initialize()
42     {
43         Console.WriteLine("Cricket Game Initialized! Start playing.");
44     }
45
46     protected override void startPlay()
47     {
48         Console.WriteLine("Cricket Game Started. Enjoy the game!");
49     }
50 }
51
52 internal class Football : Game
53 {
54     protected override void endPlay()
55     {
56         Console.WriteLine("Football Game Finished!");
57     }
58
59     protected override void initialize()
60     {
61         Console.WriteLine("Football Game Initialized! Start playing.");
62     }
63
64     protected override void startPlay()
65     {
66         Console.WriteLine("Football Game Started. Enjoy the game!");
67     }
68 }

模板模式的优缺点:

  优点:

    1)封装不变部分,扩展可变部分,符合OCP原则;

    2)提取公共代码,便于维护;

    3)行为由父类控制,子类实现。

  缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

注意:一般模板方法定义成protected使得只有子类可以访问他们。

参考:https://www.runoob.com/design-pattern/template-pattern.html

(0)

相关推荐

  • 设计模式(14) 模板方法模式

    模板方法模式 模板方法模式是面向对象系统中非常朴实的一种模式,体现出面向对象设计中继承和多态的基本特征.在开发应用的过程中,往往会在初期规划一些较粗粒度的算法,而且对参与计算的对象进行抽象,明确算法会 ...

  • 设计模式之模板方法

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

  • TemplateMethodPattern模板方法模式

    模板方法模式 1.定义 定义一个操作中的算法的框架,而将一些步骤的实现延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 使用模板方法模式制造两款汽车.定义汽车必须有的特质 ...

  • 行为型模式之模板方法

    在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关. 例如,一个 ...

  • 设计模式-行为型-访问者模式

    访问者模式(Vistor): 访问者模式的官方定义是这样的:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作.官方的东西总是晦涩难懂的,那么我们现 ...

  • 设计模式-行为型-状态模式

    状态模式(State): 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到,然后使用if else语句来做状态判断来进行不同情况的处理 ...

  • 设计模式-创建型-建造者模式

    引言: 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮.底盘.发动机.方向盘等各种部件.而对于大部分用户而言,无须知道这些部件的装配细节,也几乎不会 ...

  • 设计模式-创建型-工厂模式

    工厂设计模式: 顾名思义,该模式是用来生产对象的.在面向对象的设计模式中,万物皆对象,若使用new来创建对象,就会对该对象产生强耦合,假如我们需要更换该对象,那么使用该对象的对象都需要进行修改,这显然 ...

  • 图解Java设计模式之模板模式

    豆浆制作问题 模板方法模式基本介绍 模板方法模式原理类图 模板方法模式解决豆浆制作问题 模板方法模式的钩子方法 模板方法模式在Spring框架中的源码分析 模板方法模式的注意事项和细节 豆浆制作问题 ...

  • 设计模式-行为型-中介者模式

    中介者模式(Mediator): 在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室.QQ群.短信平台和房产中介.不论是QQ游戏还是QQ群,它们都是充当一个中间平台,QQ用户可以登录这个中 ...

  • 设计模式-创建型-抽象工厂模式

    前一章节,我们介绍了简单工厂模式以及工厂方法模式,但是这两种模式都存在一定的局限性,只能生产某一类型下的某一种产品,如果需求变更,同类型下出现了不同的产品,比如芝士披萨不仅有口味上的不同,同时存在外观 ...

  • 通俗易懂系列 | 设计模式(一):模板模式

    实际开发中常常会遇到,代码骨架类似甚至相同,只是具体的实现不一样的场景.例如:流程都有开启.编辑.驳回.结束.每个流程都包含这几个步骤,不同的是不同的流程实例它们的内容不一样.共享单车都是先开锁.骑行 ...

  • JAVA架构师之路十四:设计模式之模板模式

    JAVA架构师之路十三:设计模式之委派模式 模板模式 1. 模板模式 2. 模板模式案例 3. JDBC模板模式 没有意志,理想便是幻想. 1. 模板模式 定义 通常又叫模板模式,是指定义一个算法的骨 ...