目录
概念
- 定义:尽量使用对象组合(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数据库连接增加产品
- 类图如下:
合成复用原则
- 实现数据库连接的扩展性
-
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数据库连接增加产品
- 类图变化如下:
源码
-
GitHub
:https://github.com/Maggieq8324/design_pattern.git
- End - - 个人学习笔记 -
以上为本篇文章的主要内容,希望大家多提意见
作者:Maggieq8324
本文版权归作者和所有,欢迎转载,转载时保留原作者和文章地址即可。