首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当目标是一个好的班级设计时,需要记住什么?

当目标是一个好的班级设计时,需要记住什么?
EN

Stack Overflow用户
提问于 2013-10-06 05:51:40
回答 4查看 490关注 0票数 16

昨天,我参加了一家领先的IT服务公司的面试。技术面试很好,没有问题,然后我又转到了另一套关于管理、设计和流程的工作。除了下面的问题,我已经回答了所有的问题。

面试官问的问题:

假设您正在开发一个类,我将在我的类中通过扩展这个类来使用它,您记住的要点是什么?例如,A类,它有一个名为“方法A”的方法,它返回一个集合,比方说“列表”。你将采取什么预防措施?

我的答覆是:我会考虑以下几点:

  1. 类和方法需要公开。
  2. 方法1返回一个列表,然后它需要是泛型。这样我们就可以避免类强制转换异常。
  3. 如果要在多线程环境中访问该类,则需要同步该方法。

但是面试官不相信我的观点。他期待着与我有不同的答案,但我无法理解他的思维过程,他的例外。

所以请提供你的建议。

EN

回答 4

Stack Overflow用户

发布于 2013-10-06 06:01:20

我希望您坚持单一可实现性、开放/关闭和依赖注入的设计原则。使其保持无状态、简单和可测试性。确保可以在不需要更改的情况下进行扩展。

但我不是在采访你。

票数 10
EN

Stack Overflow用户

发布于 2013-10-06 07:04:07

还有几点还没有提到:

  1. 为您的类编写了很好的文档,这样您就不必深入您的代码来理解您所提供的功能以及问题所在了。
  2. 尝试在分发给其他人之前扩展您自己的类。这样,如果你的课程设计得不好,你就能亲身感受到痛苦,从而改善它。
  3. 如果您正在返回一个列表或任何集合,您需要问的一个重要问题是,“调用方可以修改返回的集合吗?”或者“返回的列表是类内部状态的直接表示吗?”。在这种情况下,您可能希望返回一个副本,以避免调用者扰乱您的内部状态,即维护正确的封装
  4. 计划方法的可见性,。在publicprotectedpackage privateprivate方法之间画一条明确的线。确保你不公开比你实际想要的更多。移除特征是很困难的。如果您的设计良好的API中缺少了一些内容,您可以稍后添加它。但是,如果您公开了大量无用的公共方法,您就不可能在没有推荐方法的情况下升级您的API,因为您永远不知道还有谁在使用它。
票数 6
EN

Stack Overflow用户

发布于 2013-10-06 07:58:37

如果您要返回一个集合,首先要考虑的是,我是否应该保护自己不受调用者更改内部状态的影响。

代码语言:javascript
复制
List list = myObject.getList();
list.retainAll(list2);

现在我有了list1list2之间的所有元素,问题是myObject可能不会期望您销毁它返回的列表的内容。

解决这一问题的两种常见方法是采取防御性复制或将集合包装为Collections.unmodifiableXxxx(),以避免出现额外的偏执,您可以两者兼得。

我喜欢这样做的方式是完全避免返回集合。您可以返回一个计数和一个获取n值的方法,或者对Map返回键并提供一个getter,或者允许访问每个元素。这样,您就不会暴露您的集合或需要一个副本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19205864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档