软件设计之道2.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二十一 策略模式 参与者 1.Strategy 定义所有支持的算法的公共接口。Context使用这个接口来调用某ConcreteStrategy定义的算法。? 2.ConcreteStrategy 以Strategy接口实现某具体算法。? 3.Context 用一个ConcreteStrategy对象来配置。 维护一个对Strategy对象的引用。 可定义一个接口来让Stategy访问它的数据。 实现步骤: 1. 定义抽象角色类 (定义好各个实现的共同抽象方法) 2. 定义具体策略类 (具体实现父类的共同方法) 3. 定义环境角色类 (私有化申明抽象角色变量, 重载构造方法, 执行抽象方法 ) 二十一 策略模式 案例 二十二 模板方法模式 概念 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法可以使子类可以不改变一个 算法的结构即可以重定义该算法的某些特定步骤。 方法模式的特点:把不变的行为搬到超类,去除子类中重复的代码来体现他的优势。 当不变的和可变的行为在方法中混合在一起时,不变的行为就会在子类中重复出现,模板方法模式就是将这些不变的 行为搬移到一个超类中,避免重复代码。 应用场景: 需要定义一些顶级逻辑 或者是一个操作中算法的骨架,希望一些步奏的执行推迟到其子类中时 应该考虑模板模式。 二十二 模板方法模式 适用性 1.一次性实现一个算法的不变的部分,并将可变的为留给子类来实现? 2.各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。 首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。 最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。? 3.控制子类扩展。 参与者 1.AbstractClass 定义抽象的原语操作(primitiveoperation),具体的子类将重定义它们以实现一个算法的各步骤。 实现一个模板方法,定义一个算法的骨架。 该模板方法不仅调用原语操作,也调用定义在AbstractClass或其他对象中的操作。? 2.ConcreteClass 实现操作以完成算法中与特定子类相关的步骤。 二十二 模板方法模式 案例 二十三 访问者模式 概念 表示一个作用于某对象结构中各元素的操作。它可以使你不修改各元素类的前提下定义作用于这些元素的新操作,也就是动态的增加新的方法。 Visitor模式是一种分离对象数据结构与行为的方法,通过这种分离,可以为一个已存在的类或类群增加新的操作而无需为它们作任何修改。 Visitor模式的优点: - 分离对象的数据结构与行为,让不同的类完成不同的功能 - 可以不修改已有类的基础上增加新的操作行为 - 从另一个角度来看,同一个数据结构,为其实现不同的观察者,便可呈现不同的行为 二十三 访问者模式 二十三 访问者模式 Visitor模式的实现步骤: 1,定义具有继承关系的数据结构对象群(相当于Element与ConcreteElement角色),并定义accept(Visitor)方法接受Visitor访问 2,定义包含上述数据结构对象群的复合结构对象(相当于ObjectStructure角色) 3,定义Visitor抽象接口,定义所有访问行为方法(相当于Visitor角色) 4,定义具体的访问者对象,并实现所有visit方法(相当于ConcreteVisitor角色) 举个例子: 一个公司(corporation)有几个不同的部门,A管理A部(PartA),B管理B部(PartB),CEO两者都管。 代码实现如下: 集合中的iterator方法 * 生成器模式将复杂对象的构建与对象的表现分离开来,这样使得同样的构建过程可以创建出不同的表现。这种模式用于快餐店制作儿童餐。典型的儿童餐包括一个主食,一个辅食,一杯饮料和一个玩具(例如汉堡、炸鸡、可乐和玩具车)。这些在不同的儿童餐中可以是不同的,但是组合成儿童餐的过程是相同的。无论顾客点的是汉堡,三名治还是鸡肉,过程都是一样的。柜台的员工直接把主食,辅食和玩具放在一起。这些是放在一个袋子中的。饮料被倒入杯中,放在袋子外边。这些过程在相互竞争的餐馆中是同样的。 * Runtime类 * Java io 适配器模式和装饰模式 BufferedReader(InputStreamReader(InputStream))---?适配+装饰 * 享元模式在编辑系统中大量使用。一个文本编辑器往往会提供很多种字体,而通常的做法就是将每一个字母做成一个享元对象。享元对象的内蕴状态就是这个字母,而字母 在文本文件中的位置

文档评论(0)

sdfgrt + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档