- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我试图理解 java 中的接口(interface)时,我很难获得“啊哈”的时刻。根据 java 教程网站,在接口(interface)部分他们说:
Typically, a company sells a software package that contains complex methods that another company wants to use in its own software product. An example would be a package of digital image processing methods that are sold to companies making end-user graphics programs. The image processing company writes its classes to implement an interface, which it makes public to its customers. The graphics company then invokes the image processing methods using the signatures and return types defined in the interface. While the image processing company's API is made public (to its customers), its implementation of the API is kept as a closely guarded secret—in fact, it may revise the implementation at a later date as long as it continues to implement the original interface that its customers have relied on.
我的问题与上面的解释有关。当他们说: Typically, a company sells a software package that contains complex methods that another company wants to use in its own software product
我很困惑。假设我已经定义了接口(interface),并且我有实现该接口(interface)的实现类。我的客户将如何使用我正在创建的 API?他们无法访问我的实现类,因为根据上面的描述,implementation of the API is kept as a closely guarded secret
。那么这是否意味着我向客户提供的只是一个用许多方法定义的接口(interface)。而实际的实现需要客户来完成吗?请阐明整个概念和界面的使用。我不太明白。感谢并抱歉提出菜鸟问题
最佳答案
也许一个例子可以提供帮助。
假设您有以下类/接口(interface):
public interface ImageApi {
Image create(int width, int height, Color c);
}
class ImageApiImpl implements ImageApi {
@Override
public Image create(int width, int height, Color c) {
... // implementation
}
}
public ImageApiFactory {
public static ImageApi getImageApi() {
return new ImageApiImpl();
}
}
客户端可以通过以下方式使用此 Api:
ImageApi api = ImageApiFactory.getImageApi();
Image image = api.create(128, 128, Color.Blue);
现在我们假设开发此 API 的公司找到了一种更快的创建图像的方法。不幸的是,新方法仅适用于 Windows 系统。他们将能够执行以下操作:
class FastImageApiImpl implements ImageApi {
@Override
public Image create(int width, int height, Color c) {
... // faster windows specfic implementation
}
}
public ImageApiFactory {
public static ImageApi getImageApi() {
if (isWindowsSystem()) {
return new FastImageApiImpl();
}
return new ImageApiImpl();
}
}
客户端代码保持不变,因为两个 API 实现共享相同的接口(interface)。客户端不知 Prop 体的实现。
关于java - 不理解 java 教程中提到的如何将接口(interface)用作 API 的主题。不要得到顿悟时刻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19478935/
在 C# 及其同类语言中,我们总是使用 public string SomeString { get; set;} 但是你也可以使用(我最近才发现这个,而且是在和编译器闲逛的时候发现的) public
我已经为 Controller 中的函数编写了 Swagger 注释,但在生成 swagger-ui 代码时出现错误。以下是我的注释代码 /*** End of Annotation For dele
我正在 PHP 中开发一项服务,该服务使用 exec 函数调用 jar 文件,如下所示: $text = "string with accents á, ó, ú or العربية"; exec(
我正在尝试了解有关在程序中利用/防止缓冲区溢出的方法的更多信息。我知道如果大小是恒定的,下面的代码很容易受到攻击,但是如果大小每次都是随机的怎么办?是否还有办法从堆栈中获取它并以某种方式动态改变溢出字
对于一项学校作业,我应该制作一个可以以小时、分钟和秒为单位存储时间的时间类。一切正常,但仅声明 get 时属性总是返回 0;并设置; private int seconds, minutes, hou
我正在遍历一些测验对象并将结果存储到json变量中。出现"ReferenceError is not defined"错误,不确定原因。 JS代码 // This function will send
使用 Nifi 的 PutDatabaseRecord 处理器在 MySQL 中插入阿拉伯字符(非拉丁语)时,字符被“??????”替换 插入后,阿拉伯字符串被替换为??????。我已经使用 utf8
谁能告诉我为什么 gets(abc) 使用 char[] 而不是使用 int? int abc; char name[] = "lolrofl"; printf("Hello %s.\n",na
为什么在使用 as.POSIXct 转换下面的时间戳时得到所有 NA? > head(tmp$timestamp_utc) [1] Fri Jul 03 00:15:00 EDT 2015 Fri J
def get_submultiples(n): # Get all submultiples of n if n == 1: return [1] i = 2
有没有办法访问基本模型的实际 child ,意思是:继续使用 django Docs 中的示例,让我们假设我正在建模不同的外卖餐厅,它们只是有共同点 姓名 都有deliver方法 至此: class
我正在寻找一个范围的总和,但我总是得到“未定义”。我相信有些东西出现在错误的位置,但我不确定它是什么。 第 1 部分:“编写一个范围函数,它接受两个参数(start 和 end),并返回一个包含从 s
我已将 spring 版本从 4.2.3 更新到 5.0.2,并将安全性从 5.0.1 更新到 5.0.10 并使用 spring -flex版本1.6.0.RC1。 像这样使用 BlazeDS 依赖
我可以输入但在输出中,我得到的结果为零。我使用两门类(class),一门是主要的,是日志,另一门是成绩计算。在成绩计算器中,我编写了方法和构造函数,在日志中,类通过构造函数调用这些方法。 import
我在使用 go 时遇到了构建问题。我想知道这是编译器中的错误还是代码的问题。 // removed the error handling for sake of clarity file, _ :=
我的角色在与盒子互动时出现问题。我有一个 GameObject Player 附加了一个脚本来与游戏中的盒子交互,脚本是: using UnityEngine; using System.Collec
有谁知道为什么我不能在下面生成百分比 codeIshere (第 97-117 行)? var format=d3.format(".1%"); var percent = format(functi
我正在尝试编写图像识别代码,以针对不同动物图像训练系统,这就是代码。我使用 anaconda 作为解释器,使用pycharm作为环境。 import tensorflow as tf import o
我正在尝试在 Java 中初始化 Matcher,但无论字符串是否已初始化且不为 null,都会继续获取 NPE。 这是代码: pattern.compile("\\s"); System.out.p
所以我有这段代码: ; (function (g) { var d = document, i, am = d.createElement('script'), h = d.head || d.g
我是一名优秀的程序员,十分优秀!