软件架构设计原则--合成复用原则

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 本专栏内容参考自:咕泡学院Tom老师的《Spring5核心原理与30个类手写实战》,仅作个人学习记录使用,如有侵权,联系速删
学习设计原则是学习设计模式的基础。在实际开发中,并不要求所有代码都遵循设计原则,我们要考虑人力、时间、成本、质量等多方面因素,不能刻意追求完美。但要在适当的场景遵循设计原则,这体现的是一种平衡取舍,可以帮助我们设计出更加优雅的代码。

  合成复用原则(Composite/Aggregate Reuse Principle,CARP)是指尽量使用对象组合/聚合而不是继承关系达到软件复用的目的。可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少。
  继承叫做白箱复用,相当于把所有的实现细节暴露给子类。组合/聚合被称为黑箱复用,我们是无法获取到类以外的对象的实现细节的。虽然我们要根据具体的业务场景来做代码设计,但也需要遵循OOP模型。
  这里以数据库操作为例:
  先来创建DBConnection类:

public class DBConnection {
    public String getConnection(){
        return "MySQL数据库连接";
    }
}

然后创建Dao:

public class ProductDao {
    private DBConnection dbConnection;

    public void setDbConnection(DBConnection dbConnection) {
        this.dbConnection = dbConnection;
    }
    public void addProduct(){
        String conn = dbConnection.getConnection();
        System.out.println("使用"+conn+"增加");
    }
}

  这就是一种 非常典型的合成复用原则的应用场景。但是就目前的设计来说,DBConnection还不是一种抽象,不便于系统拓展。目前是MySQL连接,假设我们的业务扩展了,还要支持Oracle连接,我们可以在DBConnection类中增加对Oracle数据库的支持,但这违背了开闭原则。
  我们可以补修改Dao的代码,而将DBConnection修改为abstract的,瞅代码:

public abstract class DBConnection {
    public abstract String getConnection();
}

然后将MySQL的逻辑抽离:

public class MySQLConnection extends DBConnection{
    @Override
    public String getConnection() {
        return "MySQL数据库连接";
    }
}

再创建Oracle支持:

public class OracleConnection extends DBConnection{

    @Override
    public String getConnection() {
        return "Oracle数据库连接";
    }
}

具体选择交给应用层就可以了。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
设计模式 前端开发 网络协议
软件体系结构 - 软件架构复用
软件体系结构 - 软件架构复用
17 0
|
6月前
|
存储 Cloud Native Linux
软件开发方法:复用与扩展
软件开发方法:复用与扩展
|
7月前
软件设计原则-合成复用原则讲解以及代码示例
合成复用原则(Composition/Aggregation Reuse Principle,CARP)是面向对象设计的一种重要原则,也被称为组合/聚合复用原则。它强调通过组合(Composition)或聚合(Aggregation)关系来达到代码复用的目的,而不是通过继承关系。
83 0
|
7月前
|
设计模式 Java
Java设计模式七大原则-合成聚合复用原则
Java设计模式七大原则-合成聚合复用原则
48 0
|
7月前
合成复用原则~
合成复用原则~
|
8月前
|
设计模式 Oracle 关系型数据库
七大设计原则之合成复用原则应用
七大设计原则之合成复用原则应用
115 0
|
9月前
|
设计模式 Oracle 关系型数据库
软件架构设计原则之合成复用原则
合成复用原则(Composite/Aggregate Reuse Principle,CARP)是指尽量使用对象组合(has-a)/聚合(contanis-a)而不是继承关系达到软件复用的目的。可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少。
79 0
|
12月前
|
设计模式 测试技术 程序员
代码的简单设计五原则
代码的简单设计五原则
33033 1
|
设计模式 算法 Java
六大原则之外的设计原则|设计原则
在前面的几篇设计原则文章中,我们分别讲述了经典的六大设计原则。但是事实上,我们在开发中还有几个重要的设计原则,在这篇文章中,一并给大家讲述。
|
设计模式
设计模式(7) -- 合成复用原则和七大原则总结
设计模式(7) -- 合成复用原则和七大原则总结
104 0
设计模式(7) -- 合成复用原则和七大原则总结