zoukankan      html  css  js  c++  java
  • 14.模板方法模式(Template Method)

    using System;
    
    namespace ConsoleApplication7
    {
        class Program
        {
            /// <summary>
            /// 模板方法模式——在一个抽象类中定义一个操作中的算法骨架(对应于生活中的大家下载的模板),
            /// 而将一些步骤延迟到子类中去实现(对应于我们根据自己的情况向模板填充内容)。
            /// 模板方法使得子类可以不改变一个算法的结构前提下,重新定义算法的某些特定步骤,
            /// 模板方法模式把不变行为搬到超类中,从而去除了子类中的重复代码。
            /// </summary>
            /// <param name="args"></param>
            static void Main(string[] args)
            {
                // 创建一个菠菜实例并调用模板方法            
                Spinach spinach = new Spinach();            
                spinach.CookVegetabel();
                Console.WriteLine("----------------------------------------------");
                ChineseCabbage chinesecabbage = new ChineseCabbage();
                chinesecabbage.CookVegetabel();
                Console.Read();
            }
    
            /// <summary>
            /// 蔬菜超类
            /// </summary>
            public abstract class Vegetabel
            {
                // 模板方法,不要把模版方法定义为Virtual或abstract方法,避免被子类重写,防止更改流程的执行顺序
                public void CookVegetabel()
                {
                    Console.WriteLine("抄蔬菜的一般做法");
                    this.pourOil();
                    this.HeatOil();
                    this.pourVegetable();
                    this.stir_fry();
                }
    
                // 第一步倒油        
                public void pourOil()
                {
                    Console.WriteLine("倒油");
                }
    
                // 把油烧热        
                public void HeatOil()
                {
                    Console.WriteLine("把油烧热");
                }
    
                // 油热了之后倒蔬菜下去,具体哪种蔬菜由子类决定        
                public abstract void pourVegetable();
    
                // 开发翻炒蔬菜        
                public void stir_fry()
                {
                    Console.WriteLine("翻炒");
                }
            }
    
            // 菠菜    
            public class Spinach : Vegetabel
            {
                public override void pourVegetable()
                { Console.WriteLine("倒菠菜进锅中"); }
            }
    
            // 大白菜    
            public class ChineseCabbage : Vegetabel
            {
                public override void pourVegetable()
                {
                    Console.WriteLine("倒大白菜进锅中");
                }
            }
        }
    }
  • 相关阅读:
    redis
    一句话总结面向对象
    HTML鼠标悬停改变样式
    div 在css中透明度怎么调?
    SpringMyBatisDay03
    list与Set、Map区别及适用场景
    Java之构造器和构造方法的使用和意义
    Set keys=Map.keyset()
    SpringMyBatisDay02
    CSS选择器可以用数字开头吗
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/4641959.html
Copyright © 2011-2022 走看看