zoukankan      html  css  js  c++  java
  • 设计模式-行为型-模板模式

    模板模式(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

  • 相关阅读:
    如何解决chrome和chromedriver版本不匹配
    RobotFramework 实战1——数据检查自动化
    RobotFramework 中的循环语句:FOR IN RANGE
    robotframework 获取昨日(get time关键词的用法)
    大数据用户画像方法与实践(干货 转帖)
    Scrapy实战篇(九)之爬取链家网天津租房数据
    Scrapy实战篇(八)之爬取教育部高校名单抓取和分析
    Scrapy实战篇(七)之爬取爱基金网站基金业绩数据
    Selenium常用方法
    Selenium之动作链(ActionChains)
  • 原文地址:https://www.cnblogs.com/az4215/p/11613371.html
Copyright © 2011-2022 走看看