面向复用的软件构造技术
-
设计可复用的类
- LSP原则
客户端可用统一的方式处理 不同类型的对象
在可以使用父类对象的场景,都可以用子类对象代替而不会有任何问题
静态检查规则:
(1) 子类型可以增加方法,但不可删
(2) 子类型需要实现抽象类型中的所有未实现方法
(3) 子类型中重写的方法必须有相同或子类型的返回值
(4) 子类型中重写的方法必须使用同样类型的参数
(5) 子类型中重写的方法不能抛出额外的异常
== 更强的不变量,更弱的前置条件,更强的后置条件 ==
LSP原则:强行为子类型化
Delegation委派/委托:一个对象请求另一个对象的功能
委派模式:通过运行时动态绑定,实现对其他类中代码的动态复用(复用的一种常见形式)
可实现功能改造:
如下为可查看日志的log
(1)Dependency:临时性的delegation:没有用来保存delegation的域
一个类利用另一个类里的函数,但不把这个类的对象作为属性。该对象可能是参数或者是方法里的局部变量。这种关系被称为”use-a”(2)Association: 永久性的delegation(包括Composition,Aggregation)
“has_a”关系- Composition: 更强的association,但难以变化
“is_part_of”关系
- Aggregation: 更弱的association,可动态变化
白/黑盒框架的原理与实现:
- 白盒框架 – 继承 知道其内部实现
通过子类型与重写进行扩展
常用的设计模式:Template Method - 黑盒框架 – 委派/组合 只知道接口方法
通过重写plugin interface进行扩展
常用的设计模式:Strategy, Observer
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!
- LSP原则