|
1
6
要真正指出你想要什么有点困难,所以我要做我自己的假设。
一个经典的方法是 意见 . 基本上 惰性编程 在其中创建一个对象,该对象可以访问原始集合并知道要应用的筛选器,但只要不需要任何内容就不进行任何计算。 在集合中,视图通常使用 迭代器 ,对于过滤,当然是已经指出的策略模式。 例如:
净好处是,如果您(比方说)只需要前10个项,那么您只需要尽可能多地应用谓词来查找前10个项,而不需要更多。
此外,没有所涉及元素的副本,即使您修改了
问题在于(除非实现缓存),每次都会计算结果。 如果您想要一个更持久的结果,那么最好构建一个只包含筛选项(或对它们的引用)的新集合。这里没有通用模式,因为它取决于您希望如何使用“筛选”列表。 至于建议的策略模式,通常可以使用复合模式逐块生成过滤器,然后将由此生成的对象作为策略传递。 复合模式特别适合于表示解析表达式的结果。例如,您可能希望查看表达式树以获得想法。 |
|
2
1
我不知道它的设计模式,但是你可以查看一些已经排序的方法,如果你解释其中的一些,为什么不喜欢它们,这将是一个有用的例子。 例如,linq有一个很好的排序方法,使用表达式树。 您还可以查看函数语言中的排序,在这里您可以传递函数来进行排序,而不是硬编码任何特定的排序。 如果您使用的是类似javascript的东西,那么可以动态创建sort函数。 |
|
|
3
1
我喜欢 用谓词筛选 属于 Google Collections 如果我不能使用它,我会实现一些非常相似的东西。你可能想查一下 this answer 对于一个实现示例来说是一个类似的问题。该实现是在Java中实现的,但是,您将看到该模式。 |
|
|
4
1
您在寻找关系数据库,从中可以使用SQL。您可以站满一个并从应用程序连接到它,或者在完整数据库和直接对象之间做一些事情。例如,在Java中,可以使用像HQLDB/JavaDB的内存数据库,并使用它的特性。你也可以用 JoSQL 这将允许您在sql中直接对对象进行操作,而不必使用数据库。 或者,如果你想自己编程,你可以先保存两份数据。一个是完整的数据集,另一个是过滤后的数据视图。然后,通过对数据进行排序并保持其在排序列表中的位置,为每一列的数据创建索引。相同的设置适用于筛选器匹配。如果某个内容与列的筛选器匹配,则为其指定1,否则为0。然后,当有人切换排序顺序时,您将数据从完整列表复制到视图列表中,或者当更改筛选器信息时,您将只获取具有匹配项的数据。 |
|
|
5
0
如果这些关系可以表示为RDF和OWL,则可以使用具有SPARQL端点(如耶拿)的工具或诸如粒料之类的推理器。但如果没有更多的细节,这是否是最好的方法还不清楚。 |
|
|
6
0
看看是否 http://en.wikipedia.org/wiki/Criteria_Pattern 可以帮助你。 基于规范模式 |