一种设计模式可以处理具有不同多重性的相似对象分组?

我正在设计一个程序,该程序允许您创建具有特征的对象,然后将其添加到数据库中。例如,这样的出租物业:

public class Property
{
    PropertyType type;
    int bedrooms;
    int bathrooms;
    double squareFootage;
    boolean furnished;
}

然后,您或其他用户可以在数据库中搜索基于这些特征的对象。但是这里有限制:

  • 所有属性都定义了每个特征之一(不能将一个特征留空)

  • 您可以按任一特征,特征组合或没有特征来搜索属性(以查看全部)。并且您可以为每个特征指定一个多重性。例如,您可以指定一个有2、3或4间卧室和2或3间浴室的HOUSE。因此,不对平方英尺或家具设置限制。

这带来了一个问题,因为搜索条件中是否存在特征可能存在,也可能不存在,并且可能具有多重性。这是我目前保留搜索条件的解决方案:

public class SearchCriteria
{
    ArrayList<PropertyType> type;
    ArrayList<int> bedrooms;
    ArrayList<int> bathrooms;
    ArrayList<double> squareFootage;
    ArrayList<boolean> furnished;
}

问题是,当我想向Property添加另一个特征时,必须将其添加到这两个类中(并且可能在数据库控制器中添加更多),并在每个类中添加其他功能。我可以利用什么设计模式来使此代码更具模块化和抽象性?

从本质上讲,一个好的答案是一种解决方案,该解决方案允许仅更改一个类/文件即可添加或删除特征。

仅使用带有覆盖函数Trait的接口getTrait()无效,因为返回值在所有特征中都不相同。

编辑:我必须实现一个SearchCriteria类,因为此程序在客户端/服务器连接上运行,因此SearchCriteria将被序列化并通过套接字发送,而不是直接发送到数据库。

tianayzht 回答:一种设计模式可以处理具有不同多重性的相似对象分组?

如果您只有少数几个特质,并且对您的业务模型至关重要,那么当您添加新特质或想要更改其中一个特质的行为类型时,必须更改多个类是完全合理的这些特征。

但是,如果您试图提供一个可以动态地向对象添加不同类型特征的模型,则可以考虑完全不将特征编码为类属性。而是让您的模型包含一个特性列表,其中每个特性都知道其特性类型。每个TraitType的数据都有特定的形状,而Criteria的形状也有特定的形状。这样一来,您就可以在文件或数据库中的某个位置定义模型,并根据需要进行更改,并且只需在标识新的TraitType时更改 code 即可。但这也将是大量的工作,并且只有在您的业务需求需要高度可配置性的情况下才值得。

本文链接:https://www.f2er.com/3062321.html

大家都在问