收藏 分享(赏)

10 设计模式教学课件.ppt

上传人:kpmy5893 文档编号:5434291 上传时间:2019-03-03 格式:PPT 页数:23 大小:62.50KB
下载 相关 举报
10 设计模式教学课件.ppt_第1页
第1页 / 共23页
10 设计模式教学课件.ppt_第2页
第2页 / 共23页
10 设计模式教学课件.ppt_第3页
第3页 / 共23页
10 设计模式教学课件.ppt_第4页
第4页 / 共23页
10 设计模式教学课件.ppt_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、模板方法模式,Template Method,由考试的例子想到的。 准备一个抽象类,将部分逻辑以具体方法以及具体子类的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模版方法模式的用意。,考试例子,class TestPaperpublic void TestQuestion1()Console.WriteLine(“ 杨过得到,后来给了郭靖,炼成倚天剑、屠龙刀的玄铁可能是 a.球磨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维 “);Console.WriteLine(“答案:“ + Answer1();

2、public void TestQuestion2()Console.WriteLine(“ 杨过、程英、陆无双铲除了情花,造成 a.使这种植物不再害人 b.使一种珍稀物种灭绝 c.破坏了那个生物圈的生态平衡 d.造成该地区沙漠化 “);Console.WriteLine(“答案:“ + Answer2();public void TestQuestion3()Console.WriteLine(“ 蓝凤凰的致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药 a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.让他们喝大量的生牛奶 e.以上全不对 “);Console.WriteLine

3、(“答案:“ + Answer3();,protected virtual string Answer1()return “;protected virtual string Answer2()return “;protected virtual string Answer3()return “;,/学生甲抄的试卷class TestPaperA : TestPaperprotected override string Answer1()return “b“;protected override string Answer2()return “c“;protected override str

4、ing Answer3()return “a“;,/学生乙抄的试卷class TestPaperB : TestPaperprotected override string Answer1()return “c“;protected override string Answer2()return “a“;protected override string Answer3()return “a“;,static void Main(string args)Console.WriteLine(“学生甲抄的试卷:“);TestPaper studentA = new TestPaperA();stu

5、dentA.TestQuestion1();studentA.TestQuestion2();studentA.TestQuestion3();Console.WriteLine(“学生乙抄的试卷:“);TestPaper studentB = new TestPaperB();studentB.TestQuestion1();studentB.TestQuestion2();studentB.TestQuestion3();Console.Read();,模板方法模式实际上是所有模式中最为常见的几个模式之一,而且很多人可能使用过模板方法模式而没有意识到自己已经使用了这个模式。模板方法模式是基

6、于继承的代码复用的基本技术,模板方法模式的结构和用法也是面向对象设计的核心。,模式定义,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,模版方法模式需要开发抽象类和具体子类的设计师之间的协作。 一个设计师负责给出一个算法的轮廓和骨架 另一些设计师则负责给出这个算法的各个逻辑步骤。 代表这些具体逻辑步骤的方法称做基本方法(primitive method) 将这些基本方法总汇起来的方法叫做模版方法(template method),这个设计模式的名字就是从此而来。,应用场景,当我们要完成在某一细节层次一致的一个过程或一

7、系列步骤,但其个别步骤在更详细的层次上的实现可能不同的时候,我们通常要考虑用模板方法模式解决。,实例,几乎所有的应用系统,都需要系统登录控制的功能,有些系统甚至有多个登陆控制的功能。 以一个基于Web的企业级应用系统为例:,普通用户登录前台的登录控制功能,前台页面:输入用户名密码;提交登录请求,让系统进行登录控制 后台:从数据库获取登录人员的信息 后台:判断是否匹配 前台Action:匹配就转向首页,否则返回登录页面,显示错误提示信息,工作人员登录后台的登录控制功能,前台页面:输入用户名密码;提交登录请求,让系统进行登录控制 后台:从数据库获取登录人员的信息 后台:把从前台传递过来的密码数据使

8、用相应的加密算法进行加密运算。 后台:判断是否匹配 前台Action:匹配就转向首页,否则返回登录页面,显示错误提示信息,完全分开,作为两个独立模块实现? 添加一个功能“同一个编号同时只能登录一次”,两模块都要修改,麻烦。 实现太相似,重复,模板方法模式的结构,抽象模版(AbstractClass)角色有如下的责任: 定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。 定义并实现了一个模版方法。这个模版方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。,具体模

9、版(ConcreteClass)角色有如下的责任: 实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。 每一个抽象模版角色都可以有任意多个具体模版角色与之对应,而每一个具体模版角色都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。,下面的例子演示了数据库访问的模板方法,abstract class DataObject / Methods abstract public void Connect(); abstract public void Select(); abstract public void Process(); abst

10、ract public void Disconnect(); / The “Template Method“ public void Run() Connect(); Select(); Process(); Disconnect(); ,class CustomerDataObject : DataObject private string connectionString = “provider=Microsoft.JET.OLEDB.4.0; “ + “data source=c:nwind.mdb“; private string commandString; private Data

11、Set dataSet; / Methods public override void Connect( ) / Nothing to do ,public override void Select( ) commandString = “select CompanyName from Customers“; OleDbDataAdapter dataAdapter = new OleDbDataAdapter( commandString, connectionString ); dataSet = new DataSet(); dataAdapter.Fill( dataSet, “Cus

12、tomers“ ); public override void Process() DataTable dataTable = dataSet.Tables“Customers“; foreach( DataRow dataRow in dataTable.Rows ) Console.WriteLine( dataRow “CompanyName“ ); public override void Disconnect() / Nothing to do ,public class TemplateMethodApp public static void Main( string args ) CustomerDataObject c = new CustomerDataObject( ); c.Run(); ,优点 实现代码复用 缺点 算法骨架不容易升级(模板和子类是非常耦合的,如要对模板中的算法骨架进行变更,会影响子类变化),实例,咖啡冲泡法: 把水煮沸 用沸水冲泡咖啡 把咖啡倒进杯子 加糖和牛奶,茶冲泡法 把水煮沸 用沸水冲泡茶叶 把茶倒进杯子 加柠檬,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 职业教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报