七个原则7-合成(组合)/聚合复用原则

七个原则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

使用的组合/复用原则

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容