一、合成复用原则简介
- 定义:尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的。
- 聚合has-A和组合contains-A。
- 优点:可以使系统更加灵活,降低类与类之间的耦合度,一个雷的变化对其他类造成的影响相对较少。
二、合成(组合)/ 聚合复用原则
- 何时使用合成/聚合、继承?
- 聚合has-A、组合contains-A、继承 is-A
二、代码实现
注:以下均为用作示例的伪代码
1.当有多个数据库连接类时,如何扩展?
public class DBConnection {
public String getConnection() {
return "MySQL数据库连接";
}
}
public class ProductDao extends DBConnection{
public void addProduct(){
String conn=super.getConnection();
System.out.println("使用"+conn+"增加产品");
}
}
public class CompositionAggregationTest {
public static void main(String[] args) {
ProductDao productDao = new ProductDao();
productDao.addProduct();
}
}
2.多个连接类时的扩展实现
public abstract class DBConnection {
public abstract String getConnection();
}
public class MySQLConnection extends DBConnection{
@Override
public String getConnection() {
return "MySQL数据库连接";
}
}
public class PostgreSQLConnection extends DBConnection{
@Override
public String getConnection() {
return "PostgreSQL数据库连接";
}
}
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 + "增加产品");
}
}
public class CompositionAggregationTest {
public static void main(String[] args) {
ProductDao productDao = new ProductDao();
productDao.setDbConnection(new PostgreSQLConnection());
productDao.addProduct();
}
}
三、关于对合成复用原则的理解
/**
* 合成复用原则相对简单,总的来说就是对需要的类和接口,进行组合,聚合,继承使其构成一个我们需要的整体,
* 但是注意同时不要肆无忌惮,否则会违背大量的其他原则,对维护和可读性造成较大的不良影响。
*/