• 设计模式之模板方法模式


    Template Method Pattern

    模板方法模式组成对象:

    • AbstractClass:定义并实现模板方法,声明模板方法中使用到的特定步骤,需要延迟到子类实现的,则为抽象方法。(模板方法是不可变的,可为密封)
    • ConcreteClass:实现抽象方法,这样就将相应的实现延迟到了子类

    模板方法模式类图:

    模板方法实例:

      业务场景,有一个旅游项目,一定会包含吃特色美食以及看特色景点,因为会有很多地方,各个地方都有差异。这里吃和看两个行为都是固定的,但是具体吃什么和看什么都是不固定,所以这里用模板方法模式

    类图:

    实例代码

     1     /// <summary>
     2     /// 旅游项目
     3     /// </summary>
     4     abstract class Tourism
     5     {
     6         public void Travel()
     7         {
     8             Console.WriteLine("景点:" + GetScenerySpot());
     9             Console.WriteLine("美食:" + GetFood());
    10         }
    11 
    12         protected abstract string GetScenerySpot();
    13         protected abstract string GetFood();
    14     }
    15 
    16 
    17     class ShangHaiTourism : Tourism
    18     {
    19         protected override string GetScenerySpot()
    20         {
    21             return "东方明珠";
    22         }
    23 
    24         protected override string GetFood()
    25         {
    26             return "本帮菜";
    27         }
    28     }
    29 
    30 
    31     class JiangxiTourism : Tourism
    32     {
    33         protected override string GetScenerySpot()
    34         {
    35             return "庐山";
    36         }
    37 
    38         protected override string GetFood()
    39         {
    40             return "赣菜";
    41         }
    42     }
    业务代码
     1         static void Main(string[] args)
     2         {
     3             Tourism tourism = new JiangxiTourism();
     4             tourism.Travel();
     5             tourism = new ShangHaiTourism();
     6             tourism.Travel();
     7 
     8             Console.ReadLine();
     9         }
    10     }
    调用代码

     模板方法模式就是一个比较简单的多态的应用。

  • 相关阅读:
    soa soap http rpc
    Work Queues(点对多)
    Hello World模式
    RabbitMQ 概念
    RabbitMQ安装
    gradle ssh 插件
    gradle基础配置
    将java打jar包成linux后台服务service
    java 8 日期api
    springboot linux启动方式
  • 原文地址:https://www.cnblogs.com/XzcBlog/p/5210039.html
Copyright © 2020-2023  润新知