1.Programming for/with reuse
for:面向复用编程,开发可复用的软件
with:基于面向编程,利用可复用软件搭建系统
2.LSP:
1).可以增加方法不可删
2).实现所有抽象类型方法
3).重写方法返回值要相同或为子类型
4).后置条件应更强
5).不能抛出额外异常
3.协变反协变
协变:有更具体规约返回值异常
反协变:有更抽象参数值
Java不能实现反协变
4.数组子类型化:
Java中数组协变每个元素为该数组的子类
5.泛型子类型化:
需要通配符(?extends)(?super)
对象类型子类型
容器类型子类型
6.delegation
委托:
1).dependency未保存委托变量
2).association保存委托变量
association:
composition(不可修改,初始化构造)
aggregation(可以修改但较弱)
7.comparator和comparable
前者是继承委托
后者未使用继承委托
8.CRP原则
1).类应该组合来复用不应该继承
2).组合对象的功能不要扩展
9.接口的组合:
接口之间通过extends来扩展,implements来组合避免继承关系
10.白盒黑盒框架原理及实现
白盒:可以看见代码,通过重写等方式进行拓展
黑盒:可以看见接口看不到代码,用委托来实现拓展