zoukankan      html  css  js  c++  java
  • 设计模式(二) 模板方法

    模板方法模式——在一个抽象类中定义一个操作中的算法骨架,而将一些步骤延迟到子类中去实现(对应于我们根据自己的情况向模板填充内容)。模板方法使得子类可以不改变一个算法的结构前提下,重新定义算法的某些特定步骤,模板方法模式把不变行为搬到超类中,从而去除了子类中的重复代码。

    优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

     1  /// <summary>
     2  /// 炒菜基类
     3  /// </summary>
     4 public abstract class CookAbstract
     5 {
     6         /// <summary>
     7         /// 模板方法
     8         /// </summary>
     9         public void Cook()
    10         {
    11             AddOil();
    12             AddVegetables();
    13             AddSalt();
    14         }
    15 
    16         /// <summary>
    17         /// 加油
    18         /// </summary>
    19         public virtual void AddOil()
    20         {
    21             Console.WriteLine("加油");
    22         }
    23         /// <summary>
    24         /// 加蔬菜
    25         /// </summary>
    26         public abstract void AddVegetables();
    27         /// <summary>
    28         /// 加盐
    29         /// </summary>
    30         public virtual void AddSalt()
    31         {
    32             Console.WriteLine("加盐");
    33         }
    34 }
    炒菜基类
     1  /// <summary>
     2  /// 炒土豆
     3  /// </summary>
     4 public class CookPotato : CookAbstract
     5 {
     6         public override void AddVegetables()
     7         {
     8             Console.WriteLine("加土豆");
     9         }
    10 }
    11  /// <summary>
    12  /// 炒白菜
    13  /// </summary>
    14 public class CookCabbage : CookAbstract
    15 {
    16         public override void AddOil()
    17         {
    18             Console.WriteLine("加花生油");
    19         }
    20         public override void AddVegetables()
    21         {
    22             Console.WriteLine("加白菜");
    23         }
    24 }
    炒菜子类
    1  CookAbstract potato = new CookPotato();
    2  CookAbstract cabbage = new CookCabbage();
    3 
    4   potato.Cook();
    5   Console.WriteLine();
    6   cabbage.Cook();
    客户端调用

    结果:

  • 相关阅读:
    如何方便的下载youtube视频?
    88. Merge Sorted Array
    83. Remove Duplicates from Sorted List
    70. Climbing Stairs
    用opencv+python全屏进行显示图片
    58. Length of Last Word
    numpy的resize和reshape区别
    Opencv的绘图
    Python的slice问题
    jqgrid一次性加载
  • 原文地址:https://www.cnblogs.com/jasonbourne3/p/11096051.html
Copyright © 2011-2022 走看看