java面向对象设计原则之合成复用原则示例详解

 更新时间:2021年10月14日 09:51:44   作者:guoyp2126  
这篇文章主要介绍了java面向对象设计原则之合成复用原则的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

概念

尽量使用合成/聚合,而不是使用继承实现复用。所谓的合成/聚合是指一个对象里持有另外一个类的对象,通过调用这些对象的方法得到复用已有功能的目的。如:报文解译程序中,按照继承复用可以设计为:

在这里插入图片描述

子类调用父类的方法即可完成水文报文解译、气象解译中通用方法;子类中一定包含了父类的方法,这个叫继承复用。

按照合成/聚合原则设计为:

在这里插入图片描述

水文协议和气象协议中,持有编码和位制转换对象,通过调用对象方法即可完成复用。

示例

数据库连接的复用:首先看通过集成关系复用数据连接代码如下

public class SqlServerConnect {
    private Connection con = null;
    public Connection getCon() {
        System.out.println("创建数据库连接");
        return con;
    }
}
public class UserDao extends SqlServerConnect {
   //继承复用连接数据
    public void queryData()
    {
        Connection con =getCon();
        String sql = "select * from emp";
        try {
            Statement statement = con.createStatement();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

UserDao继承了SqlServerConnect,复用了父类的getCon()方法;如果此时数据库不再使用SQLServer,要改成oracle,这种复用就无能为力了。
使用合成复用,代码可以修改为:

//增加一个接口
public interface DatabaseConnection {
    Connection getCon();
}
//SqlServerConnect实现该接口
public class SqlServerConnect implements DatabaseConnection {
    private Connection con = null;
    @Override
    public Connection getCon() {
        System.out.println("创建数据库连接");
        return con;
    }
}
//clsUserDaoNew和数据库连接接口呈现聚合关系,使用依赖倒置,可动态替换此类,复用了getCon()代码
public class UserDaoNew {
    private DatabaseConnection objCon;
    public UserDaoNew(DatabaseConnection conn){
        objCon = conn;
    }
    public void queryData() {
        Connection con = objCon.getCon();
        String sql = "select * from emp";
        try {
            Statement statement = con.createStatement();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在UserDaoNew类中,通过使用聚合关系,通过构造注入一个数据连接对象,通过调用这个对象的getCon()方法实现复用。这种方式,利用里氏代换和依赖倒置原则,当使用SQLServer数据库时,注入SqlServerConnect实例,如果使用oracle数据库时,注入OrcaleConnect实例,代码更加灵活,实现动态复用。

拓展

1.继承是静态复用,通过聚合复用是动态复用。所谓的静态复用是在编码阶段已经明确了类之间的关系;动态复用则是在程序运行阶段,根据实际要求注入相应的对象完成复用的,动态复用比静态复用更具有灵活性。

2.合成复用原则还体现复用范围扩大了。如上图所示,使用继承关系,则BCD转ASCII码只服务报文解译,如一个加密程序也要使用BCD转ASCII、数据位制转换,就没办法使用。

以上就是java面向对象设计原则之合成复用原则示例详解的详细内容,更多关于java面向对象设计原则的资料请关注脚本之家其它相关文章!

相关文章

  • Hibernate中Session增删改查操作代码详解

    Hibernate中Session增删改查操作代码详解

    这篇文章主要介绍了Hibernate中Session增删改查操作代码详解,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • java 中String和StringBuffer与StringBuilder的区别及使用方法

    java 中String和StringBuffer与StringBuilder的区别及使用方法

    这篇文章主要介绍了java 中String和StringBuffer与StringBuilder的区别及使用方法的相关资料,在开发过程中经常会用到String 这个类进行操作,需要的朋友可以参考下
    2017-08-08
  • SpringBoot集成Druid监控慢SQL的详细过程

    SpringBoot集成Druid监控慢SQL的详细过程

    数据库连接池是一个至关重要的组成部分,一个优秀的数据库连接池可以显著提高应用程序的性能和可伸缩性,常见的连接池:Druid、HikariCP、C3P0、DBCP等等,本文将详细介绍如何在Spring Boot项目中配置数据源,集成Druid连接池,以实现更高效的数据库连接管理
    2024-06-06
  • Maven项目打包成war包部署到Tomcat的方法

    Maven项目打包成war包部署到Tomcat的方法

    这篇文章主要介绍了Maven项目打包成war包部署到Tomcat的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 从0到1学SpringCloud之SpringCloud gateway网关路由配置示例详解

    从0到1学SpringCloud之SpringCloud gateway网关路由配置示例详解

    Spring Cloud Gateway的目标提供统一的路由方式且基于Filter 链的方式提供了网关基本的功能, 例如:安全、监控、指标和限流 ,这篇文章主要介绍了从0到1学SpringCloud之SpringCloud gateway网关路由配置示例详解,需要的朋友可以参考下
    2023-04-04
  • HttpServletResponse乱码问题_动力节点Java学院整理

    HttpServletResponse乱码问题_动力节点Java学院整理

    这篇文章主要介绍了HttpServletResponse乱码问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • SpringBoot加载启动的源码解析

    SpringBoot加载启动的源码解析

    这篇文章主要介绍了SpringBoot加载启动的源码解析,@SpringBootApplication注解是Spring Boot的核心注解,它其实是一个组合注解,本身其实也是一个IoC容器的配置类,需要的朋友可以参考下
    2023-12-12
  • idea创建maven父子工程导致子工程无法导入父工程依赖

    idea创建maven父子工程导致子工程无法导入父工程依赖

    创建maven父子工程时遇到一个问题,本文主要介绍了idea创建maven父子工程导致子工程无法导入父工程依赖,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • springboot实现分段上传功能的示例代码

    springboot实现分段上传功能的示例代码

    这篇文章主要介绍了springboot实现分段上传,包括文件上传下载,断点续传,增量上传功能,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Java代码读取文件缓存问题解决

    Java代码读取文件缓存问题解决

    最近遇到了一个Java文件读取的缓存问题,打远程断点出现的也是原来的老代码参数,本文就介绍一下解决方法,感兴趣的可以了解一下
    2021-05-05

最新评论