design-patterns - 向客户端隐藏实现

标签 design-patterns

我正在研究设计模式,有些东西我不明白。 例如,我经常遇到向客户端隐藏实现的想法。

例如,关于工厂模式,我读到应用程序的逻辑不得知道用户界面的子类,即使在创建过程中也是如此。

我不明白为什么向客户端隐藏实现是一个优势。我能想到的唯一原因就是简单。事实上,我想在这种情况下,客户端只需要知道接口(interface),而不是各种子类,才能使用对象,从而使一切变得更容易,因为您不需要知道子类的整个实现。我对吗?

但是,我认为您可能需要调用子类的特定方法,在这种情况下,您必须强制转换子类才能调用该方法。

话虽如此,我想问您以下问题:

  1. “向客户端隐藏具体类或隐藏实现”的想法是什么意思?有什么好处?这只是简单性和维护的问题吗?

此外,我希望您给我一些有关软件工程的书籍和在线资源(理论和实践)的建议。事实上,其中有几个方面我还不清楚。即独立的对象和接口(interface)编程。

感谢您的帮助

最佳答案

假设您在 A 公司工作,您开发了一个 API 并将所有内容公开。公司在不同地点和时区的其他开发人员使用您的 API 来开发他们自己的应用程序。您的 API 已被 10 个不同项目中的数百个其他人使用。由于您的代码在很多地方使用,因此您希望使其变得更好。您开发了更快的算法,甚至减少了 20% 的代码行。您很高兴在周五晚上提交了代码并离开了。当您周一早上来到办公室时,您会发现您破坏了其他人的代码。人们无法编译他们的代码,因为您删除或更改了他们所依赖的代码。您会收到大量愤怒的电子邮件和电话,最终您将不得不将 API 回滚到以前的版本。

这就是为什么你必须隐藏你的实现。一旦公开,您就无法更改。想象一下,如果 Google 更改 Android SDK 中的方法名称或方法的返回类型会发生什么。他们破坏了数千个应用程序。 API 开发人员和用户之间始终存在紧张关系。开发人员希望隐藏所有内容,而用户希望访问所有内容。如果您发布一个非常小的接口(interface),人们将不会使用您的 API,如果您公开大量实现细节,您将无法更改您的代码。

API 的用户不应该担心或考虑具体的类。这不是他们的事,而是 API 开发人员的事。如果你想了解更多,你可以阅读《Effective Java and a Design Pattern》一书。我推荐 Head First 设计模式。

关于design-patterns - 向客户端隐藏实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33318959/

相关文章:

javascript - 在 JavaScript 中重新定义方法

java - 如何创建具有根据唯一键生成的属性的对象

java - 如何分离dto映射逻辑

java - 使用多个属性查找匹配对象

design-patterns - 状态机实现

java - 代码重构: Outsourcing substeps to helper classes

javascript - 可以共享作用域和访问实例的私有(private)原型(prototype)方法

android - 在android中使用MVVM设计模式时错误找不到符号类ViewModel

model-view-controller - ASP.NET MVC 模式 - 如何在 Controller 中使用两个单独的存储库(使用 DI)

c++ - 访问模板基类函数指针类型