目录


概念


  • 定义:尽量使用对象组合(contains-A)/聚合(has-A),而不是继承关系达到软件复用的目的
  • 优点:可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少
  • 合成复用是达到开闭原则的一种实现方式


编码

实例


  • 数据库连接
  • ​DBConnection.java​

/**
* @Description DB连接
* @date Dec 19, 2021
* @version 1.0
*/
public class DBConnection {

/**
* 获取DB连接
* @return
*/
public String getConnection() {
return "Mysql数据库连接";
}

}


  • ​ProductDao.java​

/**
* @Description 产品DAO
* @date Dec 19, 2021
* @version 1.0
*/
public class ProductDao extends DBConnection {

/**
* 添加产品
*/
public void addProduct() {
String conn = super.getConnection();
System.out.println("使用" + conn + "增加产品");
}

}


  • ​Test.java​

/**
* @Description 测试类
* @date Dec 19, 2021
* @version 1.0
*/
public class Test {

public static void main(String[] args) {
ProductDao productDao = new ProductDao();
productDao.addProduct();
}

}


  • 输出:

使用Mysql数据库连接增加产品


  • 类图如下:

设计原则 - 合成复用原则_mysql


合成复用原则


  • 实现数据库连接的扩展性
  • ​DBConnection.java​

/**
* @Description DB连接
* @date Dec 19, 2021
* @version 1.0
*/
public abstract class DBConnection {

/**
* 获取DB链接
* @return
*/
public abstract String getConnection();

}


  • ​MysqlConnection.java​

/**
* @Description Mysql连接
* @date Dec 20, 2021
* @version 1.0
*/
public class MysqlConnection extends DBConnection {
@Override
public String getConnection() {
return "Mysql数据库连接";
}
}


  • ​OracleConnection.java​

/**
* @Description Oracle连接
* @date Dec 20, 2021
* @version 1.0
*/
public class OracleConnection extends DBConnection {
@Override
public String getConnection() {
return "Oracle数据库连接";
}
}


  • ​ProductDao.java​

/**
* @Description 产品DAO
* @date Dec 19, 2021
* @version 1.0
*/
public class ProductDao {

private DBConnection dbConnection;

/**
* setter注入
* @param dbConnection
*/
public void setDbConnection(DBConnection dbConnection) {
this.dbConnection = dbConnection;
}

/**
* 添加产品
*/
public void addProduct() {
String conn = dbConnection.getConnection();
System.out.println("使用" + conn + "增加产品");
}

}


  • ​Test.java​

/**
* @Description 合成复用原则测试类
* @author Coisini
* @date Dec 19, 2021
* @version 1.0
*/
public class Test {

public static void main(String[] args) {
ProductDao productDao = new ProductDao();
productDao.setDbConnection(new MysqlConnection());
productDao.addProduct();

productDao.setDbConnection(new OracleConnection());
productDao.addProduct();
}

}


  • 输出:

使用Mysql数据库连接增加产品
使用Oracle数据库连接增加产品


  • 类图变化如下:

设计原则 - 合成复用原则_mysql_02


源码


- End - - 个人学习笔记 -



以上为本篇文章的主要内容,希望大家多提意见

作者:​​Maggieq8324​

本文版权归作者和有,欢迎,转载时保留原作者和文章地址即可。