寻找合适的模式。数据封装。 Java的

时间:2011-01-04 13:29:43

标签: java design-patterns encapsulation

寻找合适的模式。

假设您有一些对象Data,您可以将这些对象合并到HistoricalData对象中(当新的Data进入并可用时)

您对DataHistoricalData都做了一些事情。一旦你掌握了数字,你就可以从HistoricalData中得到很多东西。您希望通过公共类**DerivedData**访问您获得的数据。

目前

Data(供稿) - > HistoricalData(用于计算) - > ClassA

Data(供稿) - > HistoricalData(用于计算) - > ClassB

每个班级都可以独立访问

我想

Data(供稿) - > HistoricalData(由...使用) - > DerivedData(提供访问权限) - > ClassA

Data(供稿) - > HistoricalData(由...使用) - > DerivedData(提供访问权限) - > ClassB

ClassA和ClassB只能通过DerivedData单例访问 我想明确禁止直接访问类ClassA和ClassB。

请建议一种模式我应该调查以完成此操作

4 个答案:

答案 0 :(得分:3)

DerivedData应该只是一个接口而不是单例。

答案 1 :(得分:3)

我建议考虑Abstract FactoryBuilder模式。

答案 2 :(得分:1)

你可以做所有这些事情来达到你想要的目的:

  • 宣布ClassA& ClassB作为DerivedData的内部类
  • 声明接口ClassAInterface& ClassBInterface隐藏ClassA& ClassB细节,甚至隐藏classA& DerivedData"客户端"的classB导入侧。
  • Make DerivedData提供了一种返回ClassAInterface&的方法。 ClassBInterface提供对classA& amp;的访问。 classB功能通过ClassAInterface& amp; ClassBInterface。

答案 3 :(得分:0)

(1)如果可以统一处理ClassA和ClassB,则使DerivedData成为接口/抽象类,然后从DerivedData继承ClassA和ClassB(jzd已经指出)。这样,您就可以通过DerivedData接口为客户端代码提供一致的API。

(2)如果ClassA和ClassB本质上是不同的,并且HistoricalData和客户端代码需要以不同方式对待它们,那么抽象工厂或构建器模式适合Vincenzo已经指出的那样。

上下文是导入,恕我直言。


你说,“我想明确禁止直接访问ClassA和ClassB类。”我的理解是你不想在客户端代码中显式实例化ClassA和ClassB,而是想从HistoricalData获取它们的实例。

我认为制作DerivedData单身人士毫无意义。