我正在设计一个程序,该程序允许您创建具有特征的对象,然后将其添加到数据库中。例如,这样的出租物业:
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
将被序列化并通过套接字发送,而不是直接发送到数据库。