寻找正确的模式。数据封装。JAVA

寻找正确的模式。数据封装。JAVA,java,design-patterns,encapsulation,Java,Design Patterns,Encapsulation,寻找正确的模式 假设您有一个对象数据,该对象将馈送到历史数据对象(新的数据进入并可用) 您可以同时使用数据和历史数据。一旦你分析了这些数字,你就从历史数据中衍生出了一大堆东西。您希望提供对通过公共类导出的数据的访问权**DerivedData** 当前 数据(馈送至)-->历史数据(用于计算)-->ClassA 数据(馈送至)-->历史数据(用于计算)-->ClassB 每个类都可以独立访问 我想 数据(馈送至)-->历史数据(由-->派生数据使用)(提供对-->ClassA的访问) 数据(馈送

寻找正确的模式

假设您有一个对象
数据
,该对象将馈送到
历史数据
对象(新的
数据
进入并可用)

您可以同时使用
数据
历史数据
。一旦你分析了这些数字,你就从
历史数据中衍生出了一大堆东西。您希望提供对通过公共类导出的数据的访问权
**DerivedData**

当前

数据
(馈送至)-->
历史数据
(用于计算)-->
ClassA

数据
(馈送至)-->
历史数据
(用于计算)-->
ClassB

每个类都可以独立访问

我想

数据
(馈送至)-->
历史数据
(由-->
派生数据使用)
(提供对-->
ClassA的访问)

数据
(馈送至)-->
历史数据
(由-->
派生数据使用)
(提供对-->
ClassB的访问)

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


请建议一种模式我应该研究以实现这一点

派生数据应该只是一个接口,而不是一个单独的接口

你可以做所有这些事情来实现你想要的:

  • 将ClassA和ClassB声明为DerivedData的内部类
  • 声明用于隐藏ClassA和ClassB详细信息的接口ClassA接口和ClassB接口,甚至在DerivedData“客户端”隐藏ClassA和ClassB导入
  • 使DerivedData提供返回ClassAInterface和classB接口的方法,以提供对通过ClassAInterface和classB接口公开的classA和classB功能的访问

我建议考虑或模式。

< P>(1)如果ClassA和Cabb可以以统一的方式处理,将派生数据设为接口/抽象类,然后派生数据中的子类和类(JZD已经指出)。通过这种方式,您可以通过DerivedData接口为客户端代码提供一致的API

(2) 如果ClassA和ClassB本质上是不同的,并且历史数据以及客户机代码需要对它们进行不同的处理,那么抽象工厂或构建器模式是合适的,正如Vincenzo已经指出的那样

上下文是import,IMHO


您说,“我想明确禁止直接访问类ClassA和ClassB。”我的理解是,您不想在客户机代码中显式实例化ClassA和ClassB,而是希望从历史数据中获取它们的实例


我认为让DerivedData成为singleton毫无意义。

如果我们对您的设计有更多了解,可能会有所帮助:-)您确定需要“模式”吗?还是单身?也许DerivedData是一个数据列表…并且…ClassA/ClassB实现DerivedData?简单是好的。在我看来,它就像一个交易/时态统计系统,对大卫·布洛克来说不是。另外,注意不要使事情过于复杂。有时太多的抽象实际上会对你不利。简单往往是最容易的事情。老实说,我不相信我需要一个模式,这是真的。模式可能更干净,然后将ClassA和B中的数据私有化并隐藏在DerivedData中。但这无助于防止直接访问ClassA/B,是吗?是的。使实现DerivedData的类C包含类A和类B,或者将这两个类合并,使其实现DerivedData。DerivedData接口是向其他类公开的接口。