入力文字列に基づいて適切なクラスを選択するには、ある種の Factory デザイン パターンが必要です。その優れたアプリケーションがレジストリです。適用可能なクラスは、特定の入力文字列に適しているとして、シングルトンのレジストリ クラスに自分自身を「登録」します。ファクトリ自体は、文字列から登録されたクラスへのルックアップになります。要求されている入力文字列に対してクラスが登録されていない場合、いくつかのフォールバックが存在する必要があります。それは例外であるか、または特定の実装が適用されない場合に使用される「デフォルト」の実装があります。後者は、優れたフェイルソフト オプションです。 、しかし、常に当てはまるわけではありません。
レジストリに関する避けられない問題は、関心のあるすべてのクラスを見つけて、それらが自分自身を登録していることを確認する方法です (これは特にプラグイン クラスにとって興味深いものです)。これに対する最善の解決策は、手元にある特定の言語にかなり依存しており、残念ながら、この点に関して AS3 が何を提供するかはわかりません (または、そのような動的な拡張性に興味があるかどうか)。
レジストリに関するもう 1 つの興味深い問題は、「競合」です。特定の入力文字列に対して、適用可能なクラスが複数あると主張するとどうなりますか。「最後に勝利を主張する」は最も単純ですが、単純すぎることがよくあります。特定の「優先度」または「優先度」を持つ複数の入力文字列に対して各クラスを登録するか、そうでなければ (分散されていないシステムではあまり興味深いものではありませんが、分散システムには重要です...) すべての間で「負荷分散」を行うことができます。該当する「サーバー」 (ラウンドロビンまたはより洗練された方法)。
これらのソリューションは最初のソリューションよりも 2 番目のソリューションに似ていることに気付くでしょうが、主な違いは、脆弱で堅固なハードコードされたスイッチ (OOP bete noire;-) の代わりに、文字列からクラスへの柔軟なマッピングに依存していることです。 (または、クラス構築メソッド、デリゲート、&c、実装言語の詳細に依存します。たとえば、Java では StrategyConstructing インターフェースがあり、各戦略クラスは、レジストリにサインアップするときにその戦略を実装する独自の補助クラスを登録します) .