zoukankan      html  css  js  c++  java
  • Design Patterns Part I

    Chapter One 策略模式

    1. 鸭子要加入 fly() 函数, 于是考虑在基类 duck中加入虚函数分别在子类予以实现. 但结论却是, 当涉及维护时, 为了复用目的而是用继承, 结局并不完美.

    2. 考虑使用接口, 比如有一个 flyable(), Quackable() 等等, 只有会飞的鸭子才继承 Flyable 接口中. 但这种方法会造成代码无法重用.

    结论, 软件开发上的不变真理是 CHANGE

    设计原则: 找出应用中可能需要变化之处, 把它们独立出来, 不要和那些不需要变化的代码混在一起.

    所以, Duck 类中易于变化的部分抽取出来, 放在别的类结构中. 现在飞行和呱呱叫都有它们自己的类.

    那么, 如何设计鸭子的行为呢?

    针对接口编程, 而不是针对实现编程.

    这里, 抽象出接口 FlyBehavior, 然后实现两个子类, FlyWithWings FlyNoWay. 真正用到

     

     

    还可以设置行为

    设计模式原则: 多用组合, 少用继承

    上面所写, 就是策略模式

     

    Chapter Two Visitor Strategy

    当你想要为一个对象的组合增加新的能力, 且封装部重要时, 就可以使用访问者模式

    这个模式的基本想法如下: 首先我们要有一个由许多对象组成的结构对象, 这些对象的类都用于 accept 方法用来接受访问者对象. 访问者是一个接口, 它拥有一个 visit 方法, 这个方法对访问对象结构中的不同类型元素做出不同的反应; 在对象结构的一次访问中, 我们遍历整个对象结构, 对每一个对象实施 accept 方法, 在每一个元素的 accept 方法中回调 visit 方法, 从而使访问者得以处理对象结构的每一个元素. 我们可以针对对象结构设计不同的实在访问者完成不同的操作.

    Wiki 上给出非常易于理解的例子: http://zh.wikipedia.org/wiki/%E8%AE%BF%E9%97%AE%E8%80%85%E6%A8%A1%E5%BC%8F#Java.E7.9A.84.E4.BE.8B.E5.AD.90

    另外, Wiki 的最后还给出 HTML 解析时应用 Visitor 的示例. 这就是我在面 E 家时面试官问我的问题, Visitor 模式

  • 相关阅读:
    c++中的.hpp文件
    最近用vs使用的比较好的工具
    new内存分配失败
    "0x%08x" C语言
    python爬取智联招聘工作岗位信息
    GIS应用1000例01序
    lxml 中连续调用xpath出的问题
    arcgis JavaScript API总体结构
    PostgreSQL安装
    ES6转ES5的babel的使用
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3679427.html
Copyright © 2011-2022 走看看