天天看点

设计原则 - 合成复用原则

目录

  • ​​概念​​
  • ​​编码​​
    • ​​实例​​
    • ​​合成复用原则​​
    • ​​源码​​

概念

  • 定义:尽量使用对象组合(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​​

- End -

- 个人学习笔记 -

以上为本篇文章的主要内容,希望大家多提意见

作者:​​Maggieq8324​​

本文版权归作者和所有,欢迎转载,转载时保留原作者和文章地址即可。