软件设计七大原则:(七)合成复用原则

一、合成复用原则简介

  • 定义:尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的。
  • 聚合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();
    }
}

三、关于对合成复用原则的理解

/**
* 合成复用原则相对简单,总的来说就是对需要的类和接口,进行组合,聚合,继承使其构成一个我们需要的整体,
* 但是注意同时不要肆无忌惮,否则会违背大量的其他原则,对维护和可读性造成较大的不良影响。
*/

猜你喜欢

转载自blog.csdn.net/qq_41378597/article/details/106628612