想知道java中可能的设计模式方法的输入:
场景:尝试为对象和值对的组合创建一个arraylist。 如果对象有A,B,C ......等 如果值有X1,X2,X3 ......等
对于A&组合,可能存在Y1的arraylist。 X1 对于A& A的组合,可能存在Y2的arraylist。 X2 ......等等,等等。我尝试使用Factory Creational Design Pattern,但不太匹配。任何人都可以为这个问题提出可能的设计方法吗?
我不能在我的实现中使用Apache Pair。好的我已经添加了我的问题Java类代码:
import java.util.ArrayList;
import java.util.List;
public class FieldsProvider2 {
private MyObject object;
private MyAction action;
public FieldsProvider2(MyObject object, MyAction action) {
this.object = object;
this.action = action;
}
public List<Object> getList() {
if ((action != null && object != null)) {
if (Action.A == action) {
List<Object> fields = new ArrayList<>();
if (object.getTypeKey().equals(MYObject.X1)) {
// fields.add(Y1);
// fields.add(Y2);
// fields.add(Y3);
// fields.add(Y4);
// fields.add(Y5);
// fields.add(Y5);
// fields.add(Y6);
// fields.add(Y7);
return fields;
}
if (object.getTypeKey().equals(MYObject.X2)) {
// nothing
}
if (object.getTypeKey().equals(MYObject.X3)) {
// fields.add(Y1);
}
if (object.getTypeKey().equals(MYObject.X4)) {
// fields.add(Y1);
// fields.add(Y8);
// fields.add(Y9);
}
if (object.getTypeKey().equals(MYObject.X5)) {
// fields.add(Y1);
}
if (object.getTypeKey().equals(MYObject.X6)) {
// fields.add(Y1);
}
if (object.getTypeKey().equals(MYObject.X7)) {
// fields.add(Y1);
}
if (object.getTypeKey().equals(MYObject.X8)) {
// fields.add(Y1);
}
if (object.getTypeKey().equals(MYObject.X9)) {
// fields.add(Y9);
}
if (object.getTypeKey().equals(MYObject.X10)) {
// fields.add(Y10);
}
// Common items
// fields.add(Y11);
// fields.add(Y12);
// fields.add(Y13);
// fields.add(Y14);
// or
// fields.add(Y15);
return fields;
}
if (Action.B == action) {
List<Object> fields = new ArrayList<>();
if (object.getTypeKey().equals(MYObject.X1)) {
// fields.add(Y1);
// fields.add(Y2);
// fields.add(Y3);
// fields.add(Y4);
// fields.add(Y5);
// fields.add(Y5);
// fields.add(Y6);
// fields.add(Y7);
return fields;
}
if (object.getTypeKey().equals(MYObject.X2)) {
// fields.add(Y7);
}
}
//Action.C will start
//Action.D will start and so on...
return null;
}
}
答案 0 :(得分:0)
如果我做得对,你就有这样的结构:
Map<Pair<A,X>, List<Y>>
没有用于填充此地图的设计模式,但有一些重要的事情需要考虑。 如果使用Pair作为键,则必须覆盖Pair中的hashcode()和equals()方法以使Map正常工作。另外,您应该在Pair中提供构造函数,以便在一个步骤中轻松创建搜索等关键字。
如果您使用的是Java8,则可以使用streams / lambdas进行过滤/搜索。
答案 1 :(得分:0)
在我的项目中,我实现了自己的Pair类,与Scala类似。
这里是代码库
import java.util.Objects;
public class Pair<A, B> {
public final A _1;
public final B _2;
private Pair(A _1, B b) {
this._1 = _1;
this._2 = b;
}
public A _1() {
return _1;
}
public B _2() {
return _2;
}
@Override
public String toString() {
return "(" + _1 + "," + _2 + ")";
}
public static <X, Y> Pair<X, Y> of(X a, Y b) {
return new Pair<>(a, b);
}
public static <X, Y> Pair<X, Y> pair(X a, Y b) {
return of(a, b);
}
public boolean equals(Object var1) {
return var1 instanceof Pair && Objects.equals(this._1, ((Pair) var1)._1) && Objects.equals(this._2, ((Pair) var1)._2);
}
public int hashCode() {
return this._1 == null ? (this._2 == null ? 0 : this._2.hashCode() + 1) : (this._2 == null ? this._1.hashCode() + 2 : this._1.hashCode() * 17 + this
._2.hashCode());
}
}