14.模板方法模式(Template Method)
2015-07-13 02:50
411 查看
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("倒大白菜进锅中"); } } } }
相关文章推荐
- 【SQL基础用法】——行列转换
- 【SQL】中导入导出Excel
- 【SQL】——将表中的自增列的标识修改成 n
- 【SQL常用问题】——分拆列值
- 【SQL常用问题】——合并列值
- 【SQL疑难问题】--跨域访问数据库(未解决)
- 【SQL】——行列转换
- iOS中的事件处理--续篇
- 优秀程序员如养成
- Java操作文本文件的方法详解
- 【sql】——日志表过大,整理日志表
- 【SQL】——行列转换
- 在 Windows2003 中启用分布式事务遇到的部分问题
- JAVA32问
- Ubuntu Kylin linux下安装Vivado
- FCKeditor_2.3.2 在线网页编辑器
- IE中下拉列表遮盖问题的解决方法
- Javascript获得Url中的参数
- FCKeditor_2.3.2 在线网页编辑器
- JDOM使用实例--外星人是否存在的调查