模板方法模式是一种类的行为型模式,用于定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,其缺点是对于不同的实现,都需要定义一个子类,这会导致类得个数增加,但是更加符合类职责的分配原则,使得类得内聚性得以提高。

优点:代码重用的基础技术

使用场景:

1)想要一次实现算法的不变部分,而使用子类实现算法的可变行为。

2)当子类间的通用行为需要分解、定位到通用类的时候,这样可以避免代码重复的问题。

Template Method

public abstract class Document
{
/// <summary>
/// 存储文档数据
/// </summary>
public void Save()
{
Console.WriteLine("存储文档数据");
} /// <summary>
/// 打开文档
/// </summary>
/// <param name="docName"></param>
public void Open(string docName)
{
Console.WriteLine("打开文档");
} /// <summary>
/// 关闭文档
/// </summary>
public void Close()
{
Console.WriteLine("关闭文档");
} public abstract void Read(string docName);//抽象方法读取文档
}
public abstract class Application
{
private IList<Document> docs = new List<Document>();//文档对象列表 /// <summary>
/// 判断是否可以打开指定文档
/// </summary>
/// <param name="docName"></param>
/// <returns>返回true时表示可以打开;返回false时表示不可打开</returns>
public bool CanOpenDocument(string docName)
{
return true;
} public void AddDocument(Document aDocument)
{
docs.Add(aDocument);//将文档对象添加到文档对象集合当中
Console.WriteLine("加入了aDocument对象");
} public abstract Document DoCreateDocument();//抽象方法 创建一个文档对象 /// <summary>
/// 打开指定文档
/// </summary>
/// <param name="docName">文档路径</param>
public void OpenDocument(string docName)
{
if (!CanOpenDocument(docName))
{
Console.WriteLine("文档无法打开!");
return;
} Document adoc = DoCreateDocument();
adoc.Open(docName);
adoc.Read(docName);
AddDocument(adoc);
}
}

23种设计模式之模板方法(Template Method)的更多相关文章

  1. 宋宝华:Linux设备驱动框架里的设计模式之——模板方法(Template Method)

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前言 <设计模式>这本经典 ...

  2. 行为型设计模式之模板方法(TEMPLATE METHOD)模式 ,策略(Strategy )模式

    1 模板方法(TEMPLATE METHOD)模式: 模板方法模式把我们不知道具体实现的步聚封装成抽象方法,提供一些按正确顺序调用它们的具体方法(这些具体方法统称为模板方法),这样构成一个抽象基类.子 ...

  3. Java设计模式之 — 模板方法(Template Method)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744002 今天你还是像往常一样来上班,一如既往地开始了你的编程工作. 项目经理告 ...

  4. 设计模式二--模板方法Template method

    模式分类: 书籍推荐:重构-改善既有代码的设计 重构获得模式 设计模式:现代软件设计的特征是"需求的频繁变化".设计模式的要点是 "寻找变化点,然后在变化点处应用设计模式 ...

  5. 设计模式之---模板方法template method的使用

    在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的.Template Method ...

  6. 【Unity3D与23种设计模式】模板方法模式(Template Method)

    GoF中定义: "在一个操作方法中定义算法的流程,其中某些步骤由子类完成. 模板方法模式让子类在不变更原有算法流程的情况下,还能够重新定义其中的步骤" 每一次武器攻击目标时,都要按 ...

  7. 23种设计模式之模板方法(Template Pattern)

    定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 AbstractClass:抽象类.用来定义算法骨架和原语操作,在这个类里 ...

  8. 设计模式之模板方法(Template Method)

    在整理模板方法之前,先来说点废话吧.除了记录学习总结,也来记录一下生活吧. 我们公司的老板在北京,老板也会因为项目来公司,不过不是天天来.公司有个同事,只要老板不在就天天迟到,而且一天比一天晚,经常来 ...

  9. 设计模式六: 模板方法(Template Method)

    简介 模板方法属于行为型模式的一种. 实现层面上, 在抽象类中定义了算法或流程的骨架, 将其中易变的部分延迟到子类实现, 也就是允许它的子类实现其中的某些步骤. 模板方法适用于算法不变, 但算法中某些 ...

随机推荐

  1. 腾讯QQ家族任意支付QB+修改资料csrf

    http://jz.qq.com/m_card.shtml POST /cgi-bin/league_change_userinfo HTTP/1.1 Host: jz.qq.com Connecti ...

  2. swig和angular双花括号的冲突

    swig和angular都用{{name}}来作为模板中变量的取值, 那么要共用的话怎么办: {% raw %}{{ foobar }}{% endraw %} 或者 config(['$interp ...

  3. 在swift中使用线程休眠

    C#和php都有sleep让线程休眠指定时间后再继续执行后面的代码,swift中应该如何呢?首先,找一下objective-c版本是怎么做的 [self performSelector:@select ...

  4. [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解

    一.Linux服务器上11种网络连接状态: 图:TCP的状态机 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手. 注:以下说明最好能结合”图:T ...

  5. Ubuntu下安装配置redis

    安装redis apt-get install redis-server 查看是否启动 ps -aux|grep redis 客户端连接 注: 安装Redis服务器,会自动地一起安装Redis命令行客 ...

  6. Linux下的ssh远程访问

    准备工作:首先需要在windows系统中安装虚拟机,并在虚拟机中安装好linux操作系统,这里安装的是vmware player虚拟机和ubuntu版本的操作系统.关于该部分的安装在作者的其他经验中有 ...

  7. scrapy 元素的相对xpath

  8. Git学习笔记(三)

    Git提交相关内容 在Git提交时,会保存一个提交对象,该对象包括一个指向暂存区内容快照的指针,包括本次提交作者等相关附属信息,包括零个或多个指向该提交对象的父对象指针:首次提交时是没有祖先,普通提交 ...

  9. Tomcat------如何配置域名和80端口

    1.打开Tomcat的默认安装路径下的Service.xml文件 路径:C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\Serv ...

  10. XMPP协议实现即时通讯底层书写 (一)--从RFC6121阅读開始

    Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence ok,额瑞巴蒂,说好的阅读RFC61 ...