私が達成しようとしているのは、一致条件に複数のブールオプションをマッチングさせることです。これまでのところ私のデザインです。私はそれに満足していない。どのように条件に合致する複数のオプションを効率的に書いていますか?または、複数のオプションにメジャーコードの匂いがある?特定の条件に複数のオプションを一致させる
class Condition
{
Boolean a; // Optional
Boolean b; // Optional
Boolean c; // Optional
boolean d; // mandatory
Condition(Boolean a, Boolean b, Boolean c, boolean d)
{
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
public boolean matches(Boolean a, Boolean b, Boolean c, boolean b)
{
return (a == null || this.a == a)
&& (b == null || this.b == b)
&& (c == null || this.c == c)
&& (this.b == b);
}
public static void main(String args[]) {
Condition c1 = new Condition(true, true, null, true);
Condition c2 = new Condition(null, null, false, false);
Condition c3 = new Condition(false, true, null, true);
Condition[] conditions = new Condition[]{c1,c2,c3};
for (Condition con : conditions) {
Boolean a = someTestLogic1(...);
Boolean b = someTestLogic2(...);
Boolean c = someTestLogic3(...);
boolean d = someTestLogicMandatory(...);
if (con.matches(a,b,c,d)) {
// found the matching condition
return con;
}
}
}
}
明確にすることができますか?このコードのどの部分が特に不満ですか? –
私は、より効率的な(スピード)とエレガントな方法(少ない冗長)が少ないコンストラクタparamsで同じことを達成していると思うし、すべての条件のループと最初の一致するものを見つけるために壊れて好きではない – delita
メソッドは 'someTestLogic1()'などを 'for'ループの中で呼び出します。そうですか?理由は、これらのメソッドはすべてゼロ引数メソッドのように見えますが、どのようにdiffを返すのでしょうか? 'ブール値'?私は彼らがループの外にいることができますか? – developer