目录
概念
- 定义:尽量使用对象组合(contains-A)/聚合(has-A),而不是继承关系达到软件复用的目的
- 优点:可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少
- 合成复用是达到开闭原则的一种实现方式
编码
实例
/**
* @Description DB连接
* @date Dec 19, 2021
* @version 1.0
*/
public class DBConnection {
/**
* 获取DB连接
* @return
*/
public String getConnection() {
return "Mysql数据库连接";
}
}
/**
* @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 + "增加产品");
}
}
/**
* @Description 测试类
* @date Dec 19, 2021
* @version 1.0
*/
public class Test {
public static void main(String[] args) {
ProductDao productDao = new ProductDao();
productDao.addProduct();
}
}
使用Mysql数据库连接增加产品
合成复用原则
- 实现数据库连接的扩展性
DBConnection.java
/**
* @Description DB连接
* @date Dec 19, 2021
* @version 1.0
*/
public abstract class DBConnection {
/**
* 获取DB链接
* @return
*/
public abstract String getConnection();
}
/**
* @Description Mysql连接
* @date Dec 20, 2021
* @version 1.0
*/
public class MysqlConnection extends DBConnection {
@Override
public String getConnection() {
return "Mysql数据库连接";
}
}
/**
* @Description Oracle连接
* @date Dec 20, 2021
* @version 1.0
*/
public class OracleConnection extends DBConnection {
@Override
public String getConnection() {
return "Oracle数据库连接";
}
}
/**
* @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 + "增加产品");
}
}
/**
* @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数据库连接增加产品
源码
- End -
- 个人学习笔记 -