开放封闭原则之“面向接口编程”

2024-08-27 22:18

本文主要是介绍开放封闭原则之“面向接口编程”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  

开放封闭原则之“面向接口编程”


  前言:

     同样是开放封闭原则,在ITOOjava的项目中,对“面向接口编程”又有了更深刻的理解,下面请听小编徐徐道来:


      开放封闭原则定义:用面向接口编程这就为我们以后程序的扩展性提供基础。“对修改封闭,对扩展开发”。

  利用接口的一个基本用途,规定子类的行为。更为广阔的用途是接口为其他人使用者提供什么用途。模块和模块之

间的解耦就看你的接口设计的是不是合理,是不是好用。这才是从框架设计师角度去思考问题了。 


什么是接口?

      接口就是标准,是用来隔离具体实现的(或者说是和具体实现解耦)。举个生活中的例子就是:各种手机、移动硬

盘等连接上上的USB接口就是标准,大家各自制造自己的具体产品。产品使用者和提供者都遵守这个标准,那么使用

者就不必担心自己电脑上的USB接口是否只能插移动硬盘而不能插手机。



为什么要用接口 ?

   主要是是用于处理多变的情况。

  (1)接口在实际开发过程中最大好处是,你可以按照设计,先把接口写好,然后分配大伙干活的时候,告诉a们去用写好的接口去实现他们的具体功能,而告诉b们,去写那些已经写好但是没有具体的代码的接口,这样可以提高工作效率。并且底层和应用也通过接口做了一个很明显的分层。
 
   (2)接口可以降低耦合性,换句话说,可以让某个模块或功能能够重复利用,这样只要写这功能一次代码就ok了。其他地方要用到的,全部用接口调用来实现


   (3)合理使用接口、继承,拥有良好架构的程序,二次开发上可能会节省很多时间,因为它低耦合 扩展性高。



ITOOJava5.0 代码

       走查之面向接口编程:原来的Service界面:

   
/*** 修改人:通过课程Id、考试Id、试卷Id和数据库表名来计算分数+Daniel+2016-6-14* @param couserId   课程Id* @param examId     考试Id* @param paperId    试卷Id* @param dataBaseName  数据库*/@Overridepublic boolean countScoreByPaperId(String couserId, String examId, String paperId,String dataBaseName) {// 第一步将所有的记录查出来!!boolean flag = false;Map<Serializable, Serializable> map = new HashMap<Serializable, Serializable>();map.put("couserId", couserId);map.put("paperId", paperId);String hqlstrString = "select t.studentID,t.studentName, SUM(t.score) as markScore From PaperRecord t where t.courseID=:couserId and t.paperId=:paperId GROUP BY t.studentID";List<PaperRecord> list = new ArrayList<PaperRecord>();try {// 查询到学生,和成绩信息。list = calculateScoreEao.queryByHql(hqlstrString, map, dataBaseName);List<StudentScore> liststudent = new ArrayList<StudentScore>();for (int i = 0; i < list.size(); i++) {Object ojb = (Object) list.get(i);  



把SQL语句写在CalculateScoreEao.java 中,创建一个接口:
 
   
/*** 修改人:通过课程Id、考试Id、试卷Id和数据库表名来计算分数+Daniel+2016-6-14* @param couserId   课程Id* @param examId     考试Id* @param paperId    试卷Id* @param dataBaseName  数据库表名*/public List<PaperRecord> queryStuAndMarkScoreByKeyword(String couserId, String paperId,String dataBaseName);

 
在CalculateScoreEaoImpl.java 中实现这个接口:
 
/*** 修改人:通过课程Id、考试Id、试卷Id和数据库表名来计算分数+Daniel+2016-6-14* @param couserId   课程Id* @param examId     考试Id* @param paperId    试卷Id* @param dataBaseName  数据库表名*/public List<PaperRecord> queryStuAndMarkScoreByKeyword(String couserId, String paperId,String dataBaseName){Map<Serializable, Serializable> map = new HashMap<Serializable, Serializable>();map.put("couserId", couserId);map.put("paperId", paperId);String hqlstrString = "select t.studentID,t.studentName, SUM(t.score) as markScore From PaperRecord t where t.courseID=:couserId and t.paperId=:paperId GROUP BY t.studentID";return this.CalculateScoreEao.queryStuAndMarkScoreByKeyword(String couserId, String paperId, String dataBaseName);
}



之后:CalculateScoreServiceImpl.java中代码如下:



  

优化后:       

/*** 修改人:通过课程Id、考试Id、试卷Id和数据库表名来计算分数+Daniel+2016-6-14* @param couserId* @param examId* @param paperId* @param dataBaseName*/@Overridepublic boolean countScoreByPaperId(String couserId, String examId, String paperId,String dataBaseName) {// 第一步将所有的记录查出来!!boolean flag = false;List<PaperRecord> list = new ArrayList<PaperRecord>();try {// 查询到学生,和成绩信息。list = calculateScoreEao.queryStuAndMarkScoreByKeyword(String couserId, String paperId,String dataBaseName);List<StudentScore> liststudent = new ArrayList<StudentScore>();for (int i = 0; i < list.size(); i++) {Object ojb = (Object) list.get(i);Object[] objs = (Object[]) ojb;


小结:

          特别是在ITOO这种大型的平台,利用面向接口的编程思想就更能体现出扩展性和维

护性了,ITOOJava平台现在还没有上线,即使是上线之后,也是需要不断的扩展和维护

了,将集成改成接口之后,就真正的做到了开放封闭的原则,方便以后的扩展和维护,

实际操作中也方便分模块的分工协作,就一个大项目肯定是要很多人一同去协作来做

的,这正明显的提高了运行效率、开发和维护的效率。







这篇关于开放封闭原则之“面向接口编程”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1112935

相关文章

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

C#继承之里氏替换原则分析

《C#继承之里氏替换原则分析》:本文主要介绍C#继承之里氏替换原则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#里氏替换原则一.概念二.语法表现三.类型检查与转换总结C#里氏替换原则一.概念里氏替换原则是面向对象设计的基本原则之一:核心思想:所有引py

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决