面向复用的软件构造技术
-
设计可复用的类
- LSP原则
客户端可用统一的方式处理 不同类型的对象
在可以使用父类对象的场景,都可以用子类对象代替而不会有任何问题
静态检查规则:
(1) 子类型可以增加方法,但不可删
(2) 子类型需要实现抽象类型中的所有未实现方法
(3) 子类型中重写的方法必须有相同或子类型的返回值
(4) 子类型中重写的方法必须使用同样类型的参数
(5) 子类型中重写的方法不能抛出额外的异常
== 更强的不变量,更弱的前置条件,更强的后置条件 ==
LSP原则:强行为子类型化
method2:ADT实现Comparable接口,然后override compareTo() 方法
与使用Comparator的区别:不需要构建新的Comparator类,比较代码放在ADT内部
不再有委派出现Delegation委派/委托:一个对象请求另一个对象的功能
委派模式:通过运行时动态绑定,实现对其他类中代码的动态复用(复用的一种常见形式)
可实现功能改造:
如下为可查看日志的log
更普适的使用继承:
使用接口定义系统必须对外展示的不同侧面的行为
接口之间通过extends实现行为的扩展(接口组合)
类implements 组合接口,从而规避了复杂的继承关系(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
来源:xyzhang2018
声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!
- LSP原则