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

合成/聚合复用原则(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();
    }
}

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值