zoukankan      html  css  js  c++  java
  • 《Head First设计模式》 读书笔记17 其余的模式(三) 备忘录 原型 访问者

     

    《Head First设计模式》 读书笔记17 其余的模式(三) 备忘录 原型 访问者

    备忘录(Memento Pattern)

      当你需要让对象返回之前的状态时(例如,你的用户请求“撤销”),就使用备忘录模式(Memento Pattern)

    例子场景:游戏存档功能。

      使用备忘录模式有两个目标:

      1.储存系统关键对象的重要状态。

      2.维护关键对象的封装。

      请不要忘记单一责任原则,不要把保持状态的工作和关键对象混在一起,这样比较好。这个专门掌握状态的对象,就称为备忘录。

    优点:

      将被储存的状态放在外面,不要和关键对象混在一起,这可以帮助维护内聚。

      保持关键对象的数据封装。

      提供了容易实现的恢复能力。

    用途:

      备忘录用于储存状态。

    缺点:

      储存和恢复状态的过程可能相当耗时。

      在Java系统中,其实可以考虑使用序列化(serialization)机制储存系统的状态。

    原型(Prototype Pattern)

      当创建给定类的实例的过程很昂贵或很复杂时,就使用原型模式(Prototype Pattern)

    例子场景:交互式角色扮演游戏中的各种怪兽生成,并希望高级用户能够创建自己的怪兽。

      原型模式允许你通过复制现有的实例来创建新的实例(在Java中,这意味着使用clone()方法,或者反序列化)。

      这个模式的重点在于,客户的代码在不知道要实例化何种特定类的情况下,可以制造出新的实例。

        

    优点:

      向客户隐藏制造新实例的复杂性。

      提供让客户能够产生未知类型对象的选项。

      在某些环境下,复制对象比创建新对象更有效。

    用途:

      在一个复杂的类层次中,当系统必须从其中的许多类型创建新对象时,可以考虑原型。

    缺点:

      使用原型模式的缺点:对象的复制有时相当复杂。

     

    访问者(Visitor Pattern)

      当你想要为一个对象的组合增加新的能力,且封装并不重要时,就使用访问者模式(Visitor Pattern)

    例子场景:餐厅顾客询问食物相关的营养信息。

      访问者必须参观组合内的每个元素;这样的功能是在导游(Traverser)对象中,访问者通过导游的引导,收集组合中所有对象的状态。

      一旦状态被收集了,客户就可以让访问者对状态进行各种操作。

      当需要新的功能时,只要加强访问者即可。

      

    优点:

      允许你对组合结构加入新的操作,而无需改变结构本身。

      想要加入新的操作,相对容易。

      访问者所进行的操作,其代码是集中在一起的。

    缺点:

      当采用访问者模式的时候,就会打破组合类的封装。

      因为游走的功能牵涉其中,所以对组合结构的改变就更加困难。

  • 相关阅读:
    BZOJ 3555: [Ctsc2014]企鹅QQ hash
    bzoj 4300: 绝世好题 dp
    Codeforces Round #192 (Div. 1) C. Graph Reconstruction 随机化
    Codeforces Round #192 (Div. 1) B. Biridian Forest 暴力bfs
    Codeforces Round #192 (Div. 1) A. Purification 贪心
    HDU 5514 Frogs 容斥定理
    HDU 5515 Game of Flying Circus 二分
    HDU 5521 Meeting 最短路
    HDU 5510 Bazinga 暴力匹配加剪枝
    HDU 5512 Meeting 博弈论
  • 原文地址:https://www.cnblogs.com/mengdd/p/3073741.html
Copyright © 2011-2022 走看看