23种设计模式之模板方法(Template Method)
模板方法模式是一种类的行为型模式,用于定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,其缺点是对于不同的实现,都需要定义一个子类,这会导致类得个数增加,但是更加符合类职责的分配原则,使得类得内聚性得以提高。
优点:代码重用的基础技术
使用场景:
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)的更多相关文章
- 宋宝华:Linux设备驱动框架里的设计模式之——模板方法(Template Method)
		
本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前言 <设计模式>这本经典 ...
 - 行为型设计模式之模板方法(TEMPLATE METHOD)模式 ,策略(Strategy )模式
		
1 模板方法(TEMPLATE METHOD)模式: 模板方法模式把我们不知道具体实现的步聚封装成抽象方法,提供一些按正确顺序调用它们的具体方法(这些具体方法统称为模板方法),这样构成一个抽象基类.子 ...
 - Java设计模式之 — 模板方法(Template Method)
		
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744002 今天你还是像往常一样来上班,一如既往地开始了你的编程工作. 项目经理告 ...
 - 设计模式二--模板方法Template method
		
模式分类: 书籍推荐:重构-改善既有代码的设计 重构获得模式 设计模式:现代软件设计的特征是"需求的频繁变化".设计模式的要点是 "寻找变化点,然后在变化点处应用设计模式 ...
 - 设计模式之---模板方法template method的使用
		
在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的.Template Method ...
 - 【Unity3D与23种设计模式】模板方法模式(Template Method)
		
GoF中定义: "在一个操作方法中定义算法的流程,其中某些步骤由子类完成. 模板方法模式让子类在不变更原有算法流程的情况下,还能够重新定义其中的步骤" 每一次武器攻击目标时,都要按 ...
 - 23种设计模式之模板方法(Template Pattern)
		
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 AbstractClass:抽象类.用来定义算法骨架和原语操作,在这个类里 ...
 - 设计模式之模板方法(Template Method)
		
在整理模板方法之前,先来说点废话吧.除了记录学习总结,也来记录一下生活吧. 我们公司的老板在北京,老板也会因为项目来公司,不过不是天天来.公司有个同事,只要老板不在就天天迟到,而且一天比一天晚,经常来 ...
 - 设计模式六: 模板方法(Template Method)
		
简介 模板方法属于行为型模式的一种. 实现层面上, 在抽象类中定义了算法或流程的骨架, 将其中易变的部分延迟到子类实现, 也就是允许它的子类实现其中的某些步骤. 模板方法适用于算法不变, 但算法中某些 ...
 
随机推荐
- 【WP8】图片缓存控件
			
在做图片相关的应用的时候,经常需要用大图片的缓存,默认的Image控件不支持缓存的支持,本文自定义一个支持图片缓存的控件 当图片的地址是网络图片时候 根据Url判断该图片是否存在本地,如果存在,则直接 ...
 - 【WPF】附加属性
			
一直都对附加属性理解很模糊,今天看了一篇文章,恍然大悟,用个Demo掩饰一下对附加属性的理解 附加属性,简单的理解就是给一个对象外在的定义一个属性,使得该对象拥有和使用该属性,最典型的是Grid.Ro ...
 - Unity判断网络是否连接以及判断是否连接WiFi
			
由于项目中的核心模块需要用到网络连接,所以需要首先检测用户是否有网络百度了下,有人说通过连接自己的服务器进行测试的,也有人说通过延迟来判断的最后发现原来Unity是提供了网络判断的方法的.Networ ...
 - redis的其他命令
			
1.del del key-name 用于删除已存在的键.不存在的 key 会被忽略 返回值:被删除 key 的数量 2.DUMP DUMP key-name 用于序列化给定 key ,并返回被序列化 ...
 - Three-js 创建第一个3D场景
			
1.一个场景至少需要的三种类型组件 相机/决定哪些东西将在屏幕上渲染 光源/他们会对材质如何显示,以及生成阴影时材质如何使用产生影响 物体/他们是在相机透视图里主要的渲染队形:方块.球体等 ...
 - mysql 两台主主复制配置
			
A.服务器 [mysqld] # The TCP/IP Port the MySQL Server will listen on port= server-id= #master-host=10.1. ...
 - git同时提交到两个仓库
			
有时候一个项目,希望既提交到oschina又提交到公司内网的gitlab,或者是github什么的. 使用git remote -v 查看当前git的远程仓库. 添加一个远程仓库 git remote ...
 - 关联Left Outer Join的第一条记录
			
数据准备 CREATE TABLE person (person_id ), lastname )) / INSERT ALL INTO person (person_id, firstname, l ...
 - 8 -- 深入使用Spring -- 3...1 Resource实现类UrlResource
			
8.3.1 Resource 实现类------UrlResource : 访问网络资源的实现类 1.访问网络资源 访问网络资源通过UrlResource 类实现,UrlResource是java.n ...
 - [AX]AX2012 R2 出差申请和支出报告
			
AX2012中有个模块叫做出差和支出,用于管理出差以及相关的费用,用户只能在员工自助服务EP站点上提交出差申请.费用报销报告,在Client程序中做审核以及后续的支付动作等,最后形成相关的财务分录. ...