面向对象设计-合成/聚合复用原则

合成/聚合复用原则(Composition/Aggregation Principle,CARP)也叫做合成复用原则(Composition Reuse Principle,CRP),它指在一个新的对象中引入/注入现有的对象以达到功能复用和扩展的目的。复用有两种方式,一种是组合/聚合复用(也有称黑箱复用),一种是通过继承实现复用(也称白箱复用),而合成/聚合复用原则就是说只要允许,尽量使用对象组合(has-a)/聚合(contains-a)而不是使用继承(is-a)来实现复用

代码示例

以一个Spring项目中整合MyBatis为例,DAO的基础类使用合成/聚合方式使用SqlSessionFactory,而不是直接继承SqlSessionFactory(的实现)

// 整合MyBatis的基础抽象DAO伪类码
// BaseDao内部使用SqlSessionFactory(has-a/contains-a),而不是去继承它(的实现类,is-a)
public abstract class BaseDao {
    // 一般情况下,它应是一个单例,这里仅作演示
    private SqlSessionFactory sqlSessionFactory;

    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public SqlSession getSqlSession() {
        return this.sqlSessionFactory.openSession();
    }
}

总结

合成和聚合是类和类的一种关联关系。它表示一个类中拥有或包含另外一个类型,而不是就是某个类型(子类)。

你可能感兴趣的:(面向对象设计-合成/聚合复用原则)