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

What design pattern to use for instantited objects containing permutations of a string?

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

我有一个包含项目名称的数据库 table。 每个项目都有一种“签名”(想不出更好的词来形容它),它是项目名称的所有字母,按字母顺序排序并删除空格。

给定一个由乱七八糟的字母组成的“汤串”,我想按字母顺序对这些字母进行排序,以将其与数据库中的签名相匹配,但问题是...

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

我一直在考虑只使用工厂,但这不在工厂的范围之外吗?它确实包含逻辑(我说这不是业务逻辑是对的吗?),但也许这是工厂或工厂方法的acceptable?再一次,也许这是工厂的完美用例。

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

提前致谢。

让我们从 object-oriented 从给定项目创建 n 个对象的方法开始。首先,假设该项目的类型为 String;你可以创建一个 class 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 类型的列表。请注意,此 class 有两个构造函数,一个接受字符串列表(主要基本构造函数),另一个只接受一个字符串并对其进行转换。这不是设计模式;这只是一个很好的方法,可以在不使用 util classes.

上使用静态方法的情况下从对象中写出对象

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

编辑:对主要构造函数的小改进。