指尽量使用对象组合(has-a)/ 聚合(contanis-a),而不是继承关系达到软件复用的目的。可以使系统更加灵活,降低类与类之间的耦 合度,一个类的变化对其他类造成的影响相对较少。
继承我们叫做白箱复用,相当于把所有的实现细节暴露给子类。组合/聚合也称之为黑箱复用,对类 以外的对象是无法获取到实现细节的。要根据具体的业务场景来做代码设计,其实也都需要遵循 OOP 模型。
比如数据库层的Connection
public class Service {
// 组合, 但是这里一般是接口Connection 否则我们切换数据库就麻烦了
private MysqlConnection connection;
}
聚合与组合的关系
聚合是弱引用,组合是强引用
主要是他们的生命周期,组合关系是一体的,比如人体的头没了,你人就没了。
聚合比如燕群,少了一只燕子,依旧是燕群