2011-12-14 25 views
0

我偶然发现了一个小型图书馆,它有四个包中的一些类和一个应该由谁使用这个图书馆使用的基本类。图书馆设计 - 限制使用“实习生”班/方法的模式

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

虽然我的建议刚进入我的脑海,但我无法得到一个真正的解决方案,如何做到这一点。

第一个丑陋的想法是:把公共课程放在包a和其他所有包在a.b这不是一个好主意。

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

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

回答

1

把你不希望其他人用默认修饰符看到的类(基本上根本没有修饰符)。这将使它们成为私有包。

包内的所有类都能够看到并使用它们,但是库外的任何人都不能实例化并使用它们而没有反射作弊。

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

+0

我们这样做,因为这可能是最好的工作/效果关系也@dimitrisli也有一个很好的解决方案(两个都+1) – WarrenFaith 2011-12-22 14:57:59

0

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

+1

我们谈论98%的图书馆课程。这不是一个可维护的解决方案,因为图书馆的规模可能会迅速增长。基本上我想隐藏除了一个类的所有用户。 – WarrenFaith 2011-12-14 01:34:57

2

虽然我不明白有关受保护的访问修饰符你的句子(不bc已经打包?)这里有两个建议:

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

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