zoukankan      html  css  js  c++  java
  • 设计模式23——行为型模式之模板方法模型

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

    类型:类行为型模式

    概述:

            模板方法模式应该算是所有设计模式中最简单,却也是应用得最多的模式了。模板方法模式其实就是多态的体现。

              模板方法模式设计的要点是在父类中定义好一个操作中的算法骨架,然后具体实现延迟到子类中。模板方法其实与策略模式有一些类似的地方。不同点是,策略模式将算法抽象出来成为一个新的类,而模板方法则没有将算法抽象出来。主要体现是策略模式的算法相对复杂一点,而模板方法的算法相对简单一点。

             举例,有一群人,可以按身高排序然后取其中高的一部分;也可以体量排序然后取其中体量适宜的一部分。

    类图:


    参与者:

    1. People,基类,提供一个模板方法,并且提供抽象的接口。模板方法调用接口完成具体的算法。
    1. HighPeopleFatPeople,根据想要完成的情况,来具体实现抽象接口

    示例代码:

    [csharp] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.Text;  
    4.   
    5. namespace Pattern23  
    6. {  
    7.     abstract class People  
    8.     {  
    9.         public abstract void Sort();  
    10.         public abstract void Remove();  
    11.   
    12.         public void TemplateMethod()  
    13.         {  
    14.             Sort();  
    15.             Remove();  
    16.         }  
    17.     }  
    18.   
    19.     class HighPeople : People  
    20.     {  
    21.         public override void Sort()  
    22.         {  
    23.             Console.WriteLine("按身高排序");  
    24.         }  
    25.         public override void Remove()  
    26.         {  
    27.             Console.WriteLine("排除掉身高低于170cm的人");  
    28.         }  
    29.     }  
    30.   
    31.     class FatPeople : People  
    32.     {  
    33.         public override void Sort()  
    34.         {  
    35.             Console.WriteLine("按体重排序");  
    36.         }  
    37.         public override void Remove()  
    38.         {  
    39.             Console.WriteLine("排除体量超过80K以及少于60KG的人");  
    40.         }  
    41.     }  
    42.     class Program  
    43.     {  
    44.         static void Main(string[] args)  
    45.         {  
    46.             People people;  
    47.   
    48.             people = new HighPeople();  
    49.             people.TemplateMethod();  
    50.   
    51.             people = new FatPeople();  
    52.             people.TemplateMethod();  
    53.         }  
    54.     }  
    55. }  

    适用性:

    1. 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
    2. 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
      首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。
      最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
    3. 控制子类扩展。

    优缺点:

    1. 优点,完成新的模板方法是不用修改原有代码,通过添加新代码完成。

    参考资料:

      1. 《设计模式——可复用面向对象软件基础》
      2. 《大话设计模式》
  • 相关阅读:
    Vim插件:Unite新手指导(译)
    Java并发编程实战3章
    Centos6.*下安装gcc-4.8.2
    iostat详解
    国内速度比较快的NTP Server
    ssh免密登录配置
    解决卸载移动硬盘问题:umount:/usb1/:device is busy
    Centos查看系统安装日期
    主机IP规划__rsync__inotify
    熟悉OSI七层模型
  • 原文地址:https://www.cnblogs.com/feihe0755/p/3677392.html
Copyright © 2011-2022 走看看