java面向接口编程2023027

news/2024/11/27 20:36:53/

那就再进一步:面向接口编程
面向接口编程前面已经提到,接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极好地降低程序各模块之间的耦合,从而提高系统的可扩展性和可维护性。
基于这种原则,很多软件架构设计理论都倡导“面向接口”编程,而不是面向实现类编程,希望通过面向接口编程来降低程序的耦合。怪不得公司接口是先写接口再写实现。
下面介绍两种常用场景来示范面向接口编程的优势。
1.简单工厂模式
有一个场景:假设程序中有个A类需要组合一个输出设备,现在有两个选择:直接让A类组合一个B类,或者让A类组合一个接口C(B类实现这个接口C),那么到底采用哪种方式更好呢?
开设A类要给很多地方使用,定义A类推荐使用A类组合接口C,然后写一个工厂类Fac,工厂类实现接口C并重写接口C中的方法,生成B类的对象,这样A类里面就可以使用B类对象。如果B类有改动,就不用去该A类了,只需要改有改动的B类和修改工厂类的获取B类对象的方法即可。不需要动A类。就是就是将A类和经常变化的B类通过工厂类隔离开了。

2.命令模式(场景有点怪,但是其实lambda表达式已经表现出来):
考虑这样一种场景:
某个方法需要完成某一个行为,但这个行为 的具体实现无法确定,必须等到执行该方法时才可以确定。具体一 点:假设有个方法需要遍历某个数组的数组元素,但无法确定在遍历数组元素时如何处理这些元素,需要在调用该方法时指定具体的处理行为。
这个要求看起来有点奇怪:这个方法不仅需要普通数据可以变化,甚至还有方法执行体也需要变化,难道需要把“处理行为”作为一个参数传入该方法?先了解在某些编程语言(如Ruby等)中,确实允许传入一个代码块作为参数。通过Java 8引入的Lambda表达式也可传入代码块作为参数。
对于这样一个需求,必须把“处理行为”作为参数传入该方法,这个“处理行为”用编程来实现就是一段代码。那如何把这段代码传入该方法呢?
可以考虑使用一个Command接口来定义一个方法,用这个方法来封装“处理行为”。
但这个方法没有方法体—因为现在还无法确定这个处理行为。下面是需要处理数组的处理类,在这个处理类中包含一个process()方法,这个方法无法确定处理数组的处理行为,所以定义该 方法时使用了一个Command参数,这个Command参数负责对数组的处理行为。图片来自网络
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/18640.html

相关文章

基于ffmpeg的视频处理与MPEG的压缩试验(下载安装使用全流程)

基于ffmpeg的视频处理与MPEG的压缩试验ffmpeg介绍与基础知识对提取到的图像进行处理RGB并转化为YUV对YUV进行DCT变换对每个8*8的图像块进行进行量化操作ffmpeg介绍与基础知识 ffmpeg是视频和图像处理的工具包,它的下载网址是https://ffmpeg.org/download.html。页面…

一起自学SLAM算法:7.3 估计理论

连载文章,长期更新,欢迎关注: 不管是用贝叶斯网络还是因子图,一旦SLAM问题用概率图模型得到表示后,接下来就是利用可观测量(和)推理不可观测量(和),也就是说S…

8种时间序列分类方法总结

对时间序列进行分类是应用机器和深度学习模型的常见任务之一。本篇文章将涵盖 8 种类型的时间序列分类方法。这包括从简单的基于距离或间隔的方法到使用深度神经网络的方法。这篇文章旨在作为所有时间序列分类算法的参考文章。 时间序列定义 在涵盖各种类型的时间序列 (TS) 分…

机器学习数据挖掘作业:基于BP神经网络、决策树、朴素贝叶斯网络的旧金山犯罪分类案例

研究内容 根据数据进行分类模型的构建 要求: 用python实现学习算法至少实现2-3种不同类型的学习算法(贝叶斯、神经网络、决策树等)要求比较和分析通过不同学习算法建立的模型的准确率数据自行查找合适的数据源,但不得少于1000条研究环境 系统环境: Windows 10 学生版 语言…

Week 12

洛谷P1776 宝物筛选 题目描述 终于,破解了千年的难题。小 FF 找到了王室的宝物室,里面堆满了无数价值连城的宝物。 这下小 FF 可发财了,嘎嘎。但是这里的宝物实在是太多了,小 FF 的采集车似乎装不下那么多宝物。看来小 FF 只能…

数学表达式的处理

概述 在OJ上 会遇到一些这样的题目: 小明同学写数学四则运算,有把括号写多、写少、写错的情况,比如(AB)*(C-D ,请你输入一个表达式,判断此表达式的括号是否正确(不考虑运算的结果正确性)。 每次我看到 &q…

Word2Vec与文章相似度--相似度计算

2.7.4.2 相似度计算 目的:计算18号Python频道的文章之间相似度步骤: 1、读取数据,进行类型处理(数组到Vector)2、BRP进行FIT 读取数据,进行类型处理(数组到Vector) from pyspark.ml.linalg import Vectors # 选取部分数据做测试…

Linux系统之Bonding 网卡绑定配置方法

Linux系统之Bonding 网卡绑定配置方法一、检查本地系统环境1.检查系统版本2.查看服务器网卡二、创建网卡配置文件1.进入网卡配置文件目录2.拷贝eth0的网卡配置文件3.修改bond0网卡配置文件4.修改eth1网卡配置文件5.修改eth2网卡配置文件三、创建bonding的配置文件1.编辑bonding…