Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 共享不同字段的相同类型对象的设计模式_Java_List_Object_Design Patterns_Share - Fatal编程技术网

Java 共享不同字段的相同类型对象的设计模式

Java 共享不同字段的相同类型对象的设计模式,java,list,object,design-patterns,share,Java,List,Object,Design Patterns,Share,标题听起来可能很奇怪,但解释起来更简单: 基本上,我有这个类X。这些对象的数目总是偶数。对于这两个对象中的每一个,应该存在一个可以从这两个对象访问的列表 例如,如果我创建4个X对象:A1、A2、B1、B2,我需要有两个列表,一个只能由A1和A2访问,另一个只能由B1和B2访问 提前谢谢您可能想在这里建立工厂。对工厂的一次调用将生成A和B,设置共享成员,然后将它们以数组或某种结果对象的形式返回给您。您可能希望在此处创建工厂。对工厂的一次调用将生成A和B,设置共享成员,然后将它们以数组或某种结果对象

标题听起来可能很奇怪,但解释起来更简单:

基本上,我有这个类X。这些对象的数目总是偶数。对于这两个对象中的每一个,应该存在一个可以从这两个对象访问的列表

例如,如果我创建4个X对象:A1、A2、B1、B2,我需要有两个列表,一个只能由A1和A2访问,另一个只能由B1和B2访问


提前谢谢

您可能想在这里建立工厂。对工厂的一次调用将生成A和B,设置共享成员,然后将它们以数组或某种结果对象的形式返回给您。

您可能希望在此处创建工厂。对工厂的一次调用将生成A和B,设置共享成员,然后将它们以数组或某种结果对象的形式返回给您。

您可能希望在此处创建工厂。对工厂的一次调用将生成A和B,设置共享成员,然后将它们以数组或某种结果对象的形式返回给您。

您可能希望在此处创建工厂。对工厂的一次调用生成A和B,设置共享成员,然后以数组或某种结果对象的形式将它们返回给您。

您可以为每两个实例创建一个列表,而不是使用给定列表作为构造函数参数来创建这两个实例

每个对象将仅访问其列表,因此B1、B2将使用与A1、A2不同的列表

您可以创建包含名称和列表的
映射


每次创建对象时,从地图中获取其列表。如果它不在映射中,则创建一个新列表并将其放在那里。

您可以为每两个实例创建一个列表,而不是使用给定列表作为构造函数参数来创建这两个实例

每个对象将仅访问其列表,因此B1、B2将使用与A1、A2不同的列表

您可以创建包含名称和列表的
映射


每次创建对象时,从地图中获取其列表。如果它不在映射中,则创建一个新列表并将其放在那里。

您可以为每两个实例创建一个列表,而不是使用给定列表作为构造函数参数来创建这两个实例

每个对象将仅访问其列表,因此B1、B2将使用与A1、A2不同的列表

您可以创建包含名称和列表的
映射


每次创建对象时,从地图中获取其列表。如果它不在映射中,则创建一个新列表并将其放在那里。

您可以为每两个实例创建一个列表,而不是使用给定列表作为构造函数参数来创建这两个实例

每个对象将仅访问其列表,因此B1、B2将使用与A1、A2不同的列表

您可以创建包含名称和列表的
映射


每次创建对象时,从地图中获取其列表。如果它不在地图中,创建一个新的列表并放在那里。

让我改进Tim B的答案。我还认为工厂模式是您所需要的。 首先,class
X
引用一个列表

abstract class X<T> { 
  List<T> list;

  public X(List<T> l) { list = l; }
}
在工厂中,我们“统计”了
Map,List>class2List=newhashmap();//这里可能需要同步版本
X createInstance(类){
名单;
//想法:如果HashMap包含该类,那么我们之前已经创建了一个实例。
if(class2List.contains(类)){
//第二个实例。删除以再次从0隐式计数
list=(list)class2List.remove(class);
}否则{
列表=新的ArrayList();
class2List.add(列表);
}
//现在根据类创建实例并给出列表。
//比如说
X结果;
如果(类等于(A类)){
结果=新的A(列表);
}否则{
结果=新的B(列表);
}
返回结果
}
}

让我改进Tim B的答案。我还认为工厂模式是您所需要的。 首先,class
X
引用一个列表

abstract class X<T> { 
  List<T> list;

  public X(List<T> l) { list = l; }
}
在工厂中,我们“统计”了
Map,List>class2List=newhashmap();//这里可能需要同步版本
X createInstance(类){
名单;
//想法:如果HashMap包含该类,那么我们之前已经创建了一个实例。
if(class2List.contains(类)){
//第二个实例。删除以再次从0隐式计数
list=(list)class2List.remove(class);
}否则{
列表=新的ArrayList();
class2List.add(列表);
}
//现在根据类创建实例并给出列表。
//比如说
X结果;
如果(类等于(A类)){
结果=新的A(列表);
}否则{
结果=新的B(列表);
}
返回结果
}
}

让我改进Tim B的答案。我还认为工厂模式是您所需要的。 首先,class
X
引用一个列表

abstract class X<T> { 
  List<T> list;

  public X(List<T> l) { list = l; }
}
在工厂中,我们“统计”了
Map,List>class2List=newhashmap();//这里可能需要同步版本
X createInstance(类){
名单;
//想法:如果HashMap包含该类,那么我们之前已经创建了一个实例。
if(class2List.contains(类)){
//第二个实例。删除以再次从0隐式计数
list=(list)class2List.remove(class);
}否则{
列表=新的ArrayList();
class2List.add(列表);
}
//现在根据类创建实例并给出列表。
//比如说
X结果;
如果(类等于(A类)){
结果=新的A(列表);
}否则{
结果=新的B(列表);
}
返回结果
}
}

让我改进Tim B的答案。我还认为工厂模式
/**
  * Encapsulates 2 X's and a List
  */
public class Y {

  private X x1;
  private X x2;
  private List list;

  public Y() {
    list = //..create list
    x1 = new X(list);
    x2 = new X(list);
  }
}