您需要某种工厂设计模式,以根据输入字符串选择适当的类。Registry 是一个很好的应用程序,其中适用的类使用单例 Registry 类“注册”自己,使其适合某个输入字符串;然后工厂本身就变成了从字符串到注册类的查找。当没有类为所请求的输入字符串注册时,需要存在一些后备:要么这是一个例外,要么有一个“默认”实现在没有更具体的应用时使用——后者是一个很好的故障软选项,但并不总是适用。
Registry 的一个不可避免的问题是,如何定位所有感兴趣的类并确保它们自己注册(这对于 Plugin 类特别有趣);对此的最佳解决方案相当依赖于手头的特定语言,不幸的是,我不确定 AS3 在这方面提供了什么(或者您是否对这种动态可扩展性感兴趣)。
Registry 的另一个有趣问题是“冲突”——如果多个适用的类声称是某个输入字符串的正确类,会发生什么情况。“最后赢得胜利”是最简单的,但往往过于简单;您可以让每个类注册多个具有特定“优先级”或“优先级”的输入字符串,或者(在非分布式系统上不是很有趣,但对分布式系统至关重要......)所有之间的“负载平衡”适用的“服务器”(循环或更复杂的方式)。
您会注意到,这些解决方案比您的第一个解决方案更类似于您的第二个解决方案,但关键区别在于,它们依赖于从字符串到类的灵活映射,而不是脆弱、僵化的硬编码开关(OOP bete noire;-) (或类构造方法、委托等,具体取决于实现语言的细节——例如,在 Java 中,您可能有一个 StrategyConstructing 接口,然后每个策略类将在注册注册表时注册其自己的辅助类来实现该策略) .