需求分析与系统设计课件8设计模式选讲.pptVIP

需求分析与系统设计课件8设计模式选讲.ppt

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7周 设计模式选讲 7.1设计模式简介 GoF 设计模式的基本结构 创建型模式 7.2 简单工厂模式 模式动机 模式结构 简单工厂模式包含如下角色 配置文件 Xml文件 xml.parsers 简化 7.2 工厂方法模式 模式动机 策略模式(5.9) 又见分支结构 重构 Context与Strategy的关系 状态模式(5.8) … 相似 状态接口 8.2命令模式(5.2) 2.4.1命令与执行 发送者和接收者完全解耦 强大的模式 乒乓球* _命令模式的起源 假定设计一个类Pong 普适的方法名 执行过程 似乎很糟糕 2. Pong、Pong1、Pong2可以泛化出抽象类型Comm 3.去掉Comm. execute(Ping)的参数 4、说明 2.4.3 双分派 分派/ dispatch Java 单分派 运行时类型识别(Run-Time Type Identification、RTTI) 重载 优雅的方案 意义 假设仅有unlock(),它与策略模式的场景很相似。策略模式中,方法通过方法参数选择分支,此时方法通过某个成员变量选择分支。 public interface MyStrategy{ public abstract void unlock(); } 对于pass()、moreEvent(),如果也在MyStrategy中定义它们的接口,代码如下: public interface MyStrategy { public abstract void unlock(); public abstract void pass(); public abstract void moreEvent(); } 状态接口State,该接口封装了类Door的、随着状态不同而有不同表现的行为,由于状态接口的实现类对应不同状态,因而本模式称为状态模式。 命令模式(Command pattern)是对服务请求的粗暴封装,它既不关心消息接收者是谁,也不关心方法名,简单地将服务请求封装为一个接口如命令/Command,而Command仅有一个方法为执行/execute()。 例程 2?10 一统江湖 package mand; public interface Command{ public void execute(); } 设定电视机/TV有方法open()、close()和changeChannel()用于打开、关闭和切换电视频道。遥控器/Controller对TV的操作可以使用消息传递/方法调用: TV tv = new TV(); tv.open(); tv.changeChannel(); tv.close(); 消息传递表达式如tv.open(),包含消息接收者tv和被调用的方法open();而命令模式使用Command的不同的实现类来封装每一个方法,如将方法open()封装到OpenCommand中。 package mand; public class OpenCommand implements Command{ private Television tv; public OpenCommand() { tv = new Television(); } @Override public void execute() { tv.open(); } } package mand; import tips.IoC; public class Controller{ public static void test() { Command c1 = (Command)IoC.getObject(2-11); c1.execute(); } } Controller的代码演示表明,消息的发送者和接收者完全解耦,发送者也不需要知道最终调用的是什么方法(具体的命令由反射机制获得),因而命令模式是一种强大的模式,有大量的应用场景。 1. 无视被调的方法名 import static tips.Print.*; public class Ping{ public void m(){ pln(乒乓球Ping.m()); } public void command(Comm b){ b.execute(this); } public void m1(){ pln(乒乓球Ping.m1()); } } Ping a = new Ping(); a.m(); public class Pong { public void

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档