库设计 - 限制“实习生”类/方法使用的模式

时间:2011-12-14 01:26:57

标签: java design-patterns visibility

我偶然发现了一个小型库,它有四个包中的一些类和一个基本类,应该由谁来使用这个库使用。

我必须检查这个库并建议,应该限制对某些类和方法的访问,因为用户应该只看到他真正应该使用的方法/类。在这种情况下,它应该是一个具有一些可以调用的方法的类。

虽然我的建议刚刚出现在我的脑海中,但我无法真正解决如何做到这一点。

第一个丑陋的想法是:将公共类放在包a中,将其他所有内容放在包a.b中,这不是一个好主意。

包结构会阻止protected修饰符,因为包a.b中的类需要从包a.c中的类调用方法。那么是否有一种模式可用于防止有人在a.b内实例化一个类并调用它们的公共方法?

如果对问题的描述不够好,请随时在评论中提问。感谢。

4 个答案:

答案 0 :(得分:3)

虽然我不理解您关于受保护访问修饰符的句子(不是bc已打包?),但这里有两条建议:

  • 通过工厂方法减少或管理对象创建
  • 如果你说主要类正在从其他包中访问东西,那么很可能它被视为各种类型。如果是这种情况,您可以创建与每个包的功能义务相对应的不同接口,例如您的主类将实现的InterfacePackAInterfacePackB,因此客户端代码将在接口类型下保存您的主类这种方式减少了这种非常通用和瓶颈的主类的范围和功能。

答案 1 :(得分:1)

使用默认修饰符放置您不希望其他人看到的类(基本上没有修饰符)。这将使他们包装私密。

包中的所有类都能够查看和使用它们,但是库外的任何人都无法在没有反射作弊的情况下实例化和使用它们。

这意味着库应该使用单个包。

答案 2 :(得分:0)

将人们不应使用的类作为private static类放在主类中。

答案 3 :(得分:0)

Java无法阻止jar中的公共类被调用。如果你通过混淆它们来隐藏其他类所做的事情,那么你可以放弃你的jar并只公开你想要使用的某些类。这不会使你无法使用你的公共课程,但会花费更多的工作而不是它可能值得的。