七个原则7-合成(组合)/聚合复用原则
- 定义:尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的
- 聚合
has-A
和组合contains-A
- 优点:可以使系统更加灵活,降低类与类之间的耦合度,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少
- 何时使用合成/聚合、继承
代码示例
未使用的组合/复用原则
当想增加 DBConnection
的数据库连接时,需新增加类中的方法,违反开闭原则
源码
public class DBConnection {
public String getConnection(){
return "MySQL数据库连接";
}
}
//------------------------------------------------
public class ProductDao extends DBConnection {
public void addProduct(){
String conn = super.getConnection();
System.out.println("使用"+conn+"增加产品");
}
}
UML
使用的组合/复用原则
源码
public interface DBConnection {
public String getConnection();
}
//------------------------------------------------
public class MySQLConnection implements DBConnection{
@Override
public String getConnection() {
return "MySQL数据库连接";
}
}
//------------------------------------------------
public class PostgreSQLConnection implements 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 Test {
public static void main(String[] args) {
ProductDao productDao = new ProductDao();
productDao.setDbConnection(new MySQLConnection());
productDao.addProduct();
}
}
UML
网友评论