• 设计原则 合成复用原则


    概念

    • 定义:尽量使用对象组合(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数据库连接增加产品
    
    • 类图变化如下:

    在这里插入图片描述


    源码


    - End -
    - 个人学习笔记 -

    以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
    作者:Maggieq8324
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    前端线上项目汇总
    gulp构建工具学习汇总
    ES6知识点汇总
    页游技术点汇总中
    前后端方案汇总
    vim常用命令
    互联网哲学
    js调试技巧汇总中
    windows下Docker安装MySQL
    RabbitMQ几个常用面试题
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/15709783.html
Copyright © 2020-2023  润新知