Java 共享不同字段的相同类型对象的设计模式
标题听起来可能很奇怪,但解释起来更简单: 基本上,我有这个类X。这些对象的数目总是偶数。对于这两个对象中的每一个,应该存在一个可以从这两个对象访问的列表 例如,如果我创建4个X对象:A1、A2、B1、B2,我需要有两个列表,一个只能由A1和A2访问,另一个只能由B1和B2访问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,设置共享成员,然后将它们以数组或某种结果对象
提前谢谢您可能想在这里建立工厂。对工厂的一次调用将生成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的答案。我还认为工厂模式是您所需要的。
首先,classX
引用一个列表
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的答案。我还认为工厂模式是您所需要的。
首先,classX
引用一个列表
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的答案。我还认为工厂模式是您所需要的。
首先,classX
引用一个列表
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);
}
}