对于包含字符串排列的实例化对象,使用什么设计模式



我想知道是否有一种设计模式可以涵盖制作表示字符串的多种排列的多个对象。例如:

我有一个包含项目名称的数据库表。每个项目都有一种";签名";(想不出更好的词了(,它是物品名称的所有字母,按字母顺序排序,去掉空格。

给定一个";汤串;对于混乱的字母,我想按字母顺序对这些字母进行排序,以将其与数据库中的签名相匹配,但问题是。。。

每个汤串可能包含几个额外的字母。因此,我正在寻找一种设计模式,它适合于获取一个字符串并返回一个对象列表,每个对象代表该汤字符串的排列,然后我可以在数据库中激发它。

我想只是使用一个工厂,但这不是在工厂的范围之外吗?它确实包含逻辑(我说这不是业务逻辑是对的吗?(,但也许这对于工厂或工厂方法来说是可以接受的?再说一遍,也许这是一个完美的工厂用例。

最终,我可能会采用工厂化的方法。我只是想看看是否有更好的选择。

提前谢谢。

让我们从一种从给定项创建n个对象的面向对象方法开始。首先,假设该项的类型为String;您可以创建一个类Permutations,它实现接口Iterable<String>(基本上是一个充当String类型元素列表的对象(

data class Permutations(val strings: Iterable<String>): Iterable<String> {

constructor(string: String): this(...) {
# transform string to permutations here (bonus: with lazy computations)
} 

override fun iterator(): Iterator<String> = strings.iterator()
}

现在,任何Permutations类型的对象都可以替换String类型的列表。注意,这个类有两个构造函数,一个采用字符串列表(主基本构造函数(,另一个只采用一个字符串并对其进行转换。这不是设计模式;这是一种从对象中编写对象的好方法,而无需在util类上使用静态方法。

您可以在(1(不同的对象(如策略类(、(2(lambda函数或(3(将我们的逻辑写入构造函数(不推荐(中封装将字符串转换为排列的计算。封装计算的方式取决于您需要多大的灵活性。:(

编辑:初级构造函数的小改进。

相关内容

  • 没有找到相关文章

最新更新