设计原则 - 合成复用原则
目录
- End - 
- 个人学习笔记 - 
						  
					  
						
							
						
						
						
						
						
					- 概念
- 编码- 实例
- 合成复用原则
- 源码
 
概念
- 定义:尽量使用对象组合(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