class Program
{ static void Main(string[] args)
{ //创建一个菠菜实例并调用模板方法
Spinach spinach = new Spinach();
spinach.CookVegetable(); Thread.Sleep();
//创建一个白菜实例并调用模板方法
ChineseCabbage chineseCabbage = new ChineseCabbage();
chineseCabbage.CookVegetable();
Console.Read();
} } //炒菜类 炒菜有些步骤是一样的,比如 放油、放葱姜蒜、放菜(具体那种菜,根据实际需要添加)翻炒、盛菜。
public abstract class Vegetable
{
// 模板方法,不要把模版方法定义为Virtual或abstract方法,避免被子类重写,防止更改流程的执行顺序
public void CookVegetable()
{
Console.WriteLine("开始炒菜…………");
this.PourOil();
this.HeatOil();
this.PutDressing();
this.PourVegetable();
this.stir_fry();
this.OK();
} public void PourOil()
{
Console.WriteLine("第一步:倒油");
} public void HeatOil()
{
Console.WriteLine("把油烧热");
} public void PutDressing()
{
Console.WriteLine("第二步:放调料");
} //抽象放菜方法 可以后期根据具体炒的菜名进行重写
public abstract void PourVegetable(); // 开发翻炒蔬菜
public void stir_fry()
{
Console.WriteLine("翻炒");
} public void OK()
{
Console.WriteLine("菜炒好了,盛到盘子里");
}
} //具体炒的菜种类 //菠菜
public class Spinach : Vegetable
{
public override void PourVegetable()
{
Console.WriteLine("这道菜是菠菜,倒入菠菜");
}
}
//大白菜
public class ChineseCabbage : Vegetable
{
public override void PourVegetable()
{
Console.WriteLine("这道菜是白菜,倒入白菜");
}
}

此方法模式可以重复使用代码,把一个共性的过程作为一个模板,然后对这个模板进行细分,把一些个性的功能写成抽象方法,需要个性化的时候,只需要对抽象方法进行重写即可。

原文地址:http://www.cnblogs.com/zhili/p/TemplateMethodPattern.html

C#设计模式--模板方法模式(学习Learning hard 设计模式笔记)的更多相关文章

  1. linkin大话设计模式--模板方法模式

    linkin大话设计模式--模板方法模式 准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不 ...

  2. 结合JDK源码看设计模式——模板方法模式

    前言: 相信很多人都听过一个问题:把大象关进冰箱门,需要几步? 第一,把冰箱门打开:第二,把大象放进去:第三,把冰箱门关上.我们可以看见,这个问题的答案回答的很有步骤.接下来我们介绍一种设计模式--模 ...

  3. 瑞幸咖啡还是星巴克,一杯下午茶让我明白 设计模式--模板方法模式(Template Method Pattern)

    简介 Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template M ...

  4. CSharp设计模式读书笔记(23):模板方法模式(学习难度:★★☆☆☆,使用频率:★★★☆☆)

    模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中.模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模式角色与结构: 实现代码: using System; ...

  5. Head First设计模式——模板方法模式

    前言:本篇我们讲解模板方法模式,我们以咖啡和茶的冲泡来学习模板方法.关于咖啡另一个设计模式例子也以咖啡来讲解,可以看下:Head First设计模式——装饰者模式 废话不多说,开始进入模板方法模式. ...

  6. C#设计模式-模板方法模式

    提到模板,大家肯定不免想到生活中的“简历模板”.“论文模板”.“Word中模版文件”等,在现实生活中,模板的概念就是——有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它,例如简历模板,下 ...

  7. java设计模式 模板方法模式Template Method

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.毫无疑问,设计模式于己 ...

  8. JAVA 设计模式 模板方法模式

    定义 模板方法模式 (Template Method) 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模 ...

  9. 深入浅出设计模式——模板方法模式(Template Method Pattern)

    模式动机 模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一.在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法实现放在不同的子类中.在模板方法模式 ...

  10. 设计模式-模板方法模式(Head First)

    参考书籍:Head First设计模式 什么是模板方法模式 定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 怎 ...

随机推荐

  1. C++类模板 template <class T>

    C++在发展的后期增加了模板(template )的功能,提供了解决这类问题的途径.可以声明一个通用的类模板,它可以有一个或多个虚拟的类型参数. 比如: class Compare_int class ...

  2. Django(图书管理系统1)

    day63 内容回顾     1. 单表的增删改查         1. 删和改             1. GET请求 URL传值                 1. 格式            ...

  3. mariadb审计日志通过 logstash导入 hive

    我们使用的 mariadb, 用的这个审计工具 https://mariadb.com/kb/en/library/mariadb-audit-plugin/ 这个工具一点都不考虑后期对数据的处理, ...

  4. SecurityManager入门

    java安全管理器SecurityManager入门 SecurityManager 每个Java应用都可以有自己的安全管理器,它是防范恶意攻击的主要安全卫士. 安全管理器通过执行运行阶段检查和访问授 ...

  5. 常见无线组网分析(NB-IOT组网和Mesh组网)

      NB-IOT LoRa Zigbee WIFI 蓝牙 组网方式 基于现有蜂窝组网 基于LoRa网关 基于Zigbee网关 基于无线路由器 居于蓝牙Mesh的网关 网络部署方式 节点 节点 + 网关 ...

  6. 读Lock-Free论文实践

    论文地址:implementing Lock-Free Queue 论文大体讲的意思是:Lock-Base的程序的performance不好,并且a process inside the critic ...

  7. centos安装python与jdk

    安装python #压缩包安装 [root@china ~]# yum -y install zlib* Loaded plugins: fastestmirror, refresh-packagek ...

  8. qwq

    \[{\color{coral}{\texttt{ 邪王真眼是最强的!}}}\] \[{\color{coral}{\texttt{ 爆裂吧现实----}}}\] \[{\color{coral}{\ ...

  9. java的Arrays工具类

    1年多了,jdk还不是很熟,补补. package lhy.core.util; import java.util.Arrays; import java.util.List; public clas ...

  10. 视口(viewport)原理详解之第一部分

    在这篇文章中,我将解释viewports和元素width是如何工作的,比如html元素.  window和 screen. 这篇文章主要针对桌面浏览器,但它的部分和移动设备中的结论也比较类似,所以也是 ...