软件构造(7)- 可复用性

面向复用的软件构造技术
  1. 设计可复用的类

    1. LSP原则
      客户端可用统一的方式处理 不同类型的对象
      在可以使用父类对象的场景,都可以用子类对象代替而不会有任何问题
      静态检查规则:
      (1) 子类型可以增加方法,但不可删
      (2) 子类型需要实现抽象类型中的所有未实现方法
      (3) 子类型中重写的方法必须有相同或子类型的返回值
      (4) 子类型中重写的方法必须使用同样类型的参数
      (5) 子类型中重写的方法不能抛出额外的异常
      == 更强的不变量,更弱的前置条件,更强的后置条件 ==

    LSP原则:强行为子类型化

    软件构造(7)- 可复用性

    method2:ADT实现Comparable接口,然后override compareTo() 方法
    与使用Comparator的区别:不需要构建新的Comparator类,比较代码放在ADT内部
    不再有委派出现

    Delegation委派/委托:一个对象请求另一个对象的功能
    委派模式:通过运行时动态绑定,实现对其他类中代码的动态复用(复用的一种常见形式)
    可实现功能改造:
    如下为可查看日志的log

    软件构造(7)- 可复用性
    更普适的使用继承:
    使用接口定义系统必须对外展示的不同侧面的行为
    接口之间通过extends实现行为的扩展(接口组合)
    类implements 组合接口,从而规避了复杂的继承关系

    (1)Dependency:临时性的delegation:没有用来保存delegation的域
    一个类利用另一个类里的函数,但不把这个类的对象作为属性。该对象可能是参数或者是方法里的局部变量。这种关系被称为”use-a”

    (2)Association: 永久性的delegation(包括Composition,Aggregation)
    “has_a”关系

    • Composition: 更强的association,但难以变化
      “is_part_of”关系
    • Aggregation: 更弱的association,可动态变化

    白/黑盒框架的原理与实现:

    1. 白盒框架 – 继承 知道其内部实现
      通过子类型与重写进行扩展
      常用的设计模式:Template Method
    2. 黑盒框架 – 委派/组合 只知道接口方法
      通过重写plugin interface进行扩展
      常用的设计模式:Strategy, Observer

    来源:xyzhang2018

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年5月13日
下一篇 2019年5月13日

相关推荐