隐藏对客户的实施

时间:2015-10-24 13:52:05

标签: design-patterns

我正在研究设计模式,有一些我无法理解的事情。 例如,我经常遇到将实现隐藏到客户端的想法。

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

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

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

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

  1. “隐藏具体类或隐藏实现到客户端的意思是什么意思?有什么好处?这只是一个简单和维护的问题吗?
  2. 此外,我希望您就软件工程的书籍和在线资源(理论与实践)给我一些建议。实际上,它有几个方面我不清楚。即独立的对象和编程接口。

    感谢您的帮助

1 个答案:

答案 0 :(得分:2)

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

这就是你必须隐藏你的实现的原因。一旦公开,你就无法改变它。想想如果Google在Android SDK中更改方法名称或返回方法类型会发生什么。他们打破了数千个应用程序API开发人员和用户之间始终存在紧张关系。开发人员希望隐藏所有内容,用户希望访问所有内容。如果你发布一个非常小的界面,人们将不会使用你的API,如果你公开了很多实现细节,你将无法更改你的代码。

API的用户不应该担心或考虑具体的类。他们的业务不属于API开发人员。如果您想了解更多信息,可以阅读Effective Java和Design Pattern一书。我推荐Head first Design Patterns。