如何设计类层次结构?

时间:2015-04-08 18:46:39

标签: java class

我在Java 7编程,现在我需要为所有具体条件创建基类BaseCondition。我的意思是我有一些类型:DateInteger和一些enum,我需要存储_ALL_INTEGERS > 100 and < 200_ALL_INTEGERS > 100等条件, _ALL_INTEGERS < 200以及日期(更多,更少,之间)。对于enum我现在只选择一个值,所以如果

enum BonusType{
    BIRTHDAY,
    REGISTRATION
}

然后条件看起来像BonusType= BIRTHDAYBonusType= REGISTRATION

所以我想写的是

public class <T> ConditionBase{
    private T low;
    private T high;
    //GET, SET
}

并在我需要为枚举创建条件时使用low=high。所有条件都是派生类,如下所示:

public class DateCondition extends BaseCondition<Date>{ }
public class BonusTypeCondition extends BaseCondition<BonusType>{ }

具体条件示例:

BaseCondition c = new BonusTypeCondition();
c.setLow(BonusType.BIRTHDAY);
c.setHigh(BonusType.BIRTHDAY);

问题 :当我尝试扩展某些功能时,我不确定是否会遇到麻烦(添加更复杂的条件)。你不能建议更具可扩展性的东西吗?

1 个答案:

答案 0 :(得分:2)

嗯,您的概念非常接近于在每种情况下存储Java 8 Lambda /闭包。如果您无法切换版本,则必须抽象出low或&#39; high`对于枚举可能不合理的事实。所以你的条件的真正基础应该是这样的:

public interface ConditionBase<T>
{
   boolean fulfills(T object);  // True if this object fullfills the condition.
}

这是唯一的一般情况。然后,您可以为具有上限的类创建一些实现。

public class<T extends Comparable> LessThanX() implements ConditionBase<T>
{
   ...
   private T value;

   ...
   public boolean fullfills(T object)
   {
      return object.compareTo(value) < 0;
   }
}

请原谅我,如果有任何语法错误,自从我搬到Scala后,我的Java就生锈了。

您可以根据需要定义任意数量的条件,使用一个或多个内部值(在isntance之间)。您还可以创建一些包含其中几个条件的包装器,并针对所有这些条件检查对象等。

相关问题