我正在研究设计模式,有些东西我不明白。 例如,我经常遇到向客户端隐藏实现的想法。
例如,关于工厂模式,我读到应用程序的逻辑不得知道用户界面的子类,即使在创建过程中也是如此。
我不明白为什么向客户端隐藏实现是一个优势。我能想到的唯一原因就是简单。事实上,我想在这种情况下,客户端只需要知道接口(interface),而不是各种子类,才能使用对象,从而使一切变得更容易,因为您不需要知道子类的整个实现。我对吗?
但是,我认为您可能需要调用子类的特定方法,在这种情况下,您必须强制转换子类才能调用该方法。
话虽如此,我想问您以下问题:
- “向客户端隐藏具体类或隐藏实现”的想法是什么意思?有什么好处?这只是简单性和维护的问题吗?
此外,我希望您给我一些有关软件工程的书籍和在线资源(理论和实践)的建议。事实上,其中有几个方面我还不清楚。即独立的对象和接口(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/