2009-04-27 9 views
1

テンプレートシングルトンクラスのようにする方法はありますか?それを拡張すると、拡張クラスもシングルトンクラスなので、新しいシングルトンクラスを素早く作成してテンプレートシングルトンクラスを拡張できますか?私はActionScript 3.0を使用しています。シングルトンクラスを拡張しますか?

ありがとうございました。

+0

シングルトンクラスの繰り返しコードを書くのは少し怠惰なので、私はeclipseでtemplateclassを作成しました。私はコードを見つけて置き換えることもできます。 –

答えて

7

シングルトンパターンは、型が継承されないように設計されています。私はActionScriptに精通していませんが、拡張可能なシングルトンタイプを持つことは間違いのようです。

これは、親と子の両方のタイプが同じアプリケーションに1つのインスタンスをロードできることを意味します。タイプは多形的にタイプParentであるため、技術的にはシングルトンではなくなります。Parent

+0

ありがとう、私は多型バグを考慮しなかった、私はあなたが正しいと思います。ありがとう。 –

+2

"シングルトンパターンは、型を継承しないように設計されています。" これは単に真実ではありません。これは一度だけインスタンス化されるように設計されています。 – Luke

+2

@ルーク:1つのインスタンスのみが存在し、同じタイプを他のタイプの基本クラスにすることはできますか?この「シングルトン」の子タイプのインスタンスは、「シングルトン」の第2インスタンスではないでしょうか? –

4

まず、私はこれを十分に強調することはできません。シングルトンの使用がSingleton as an antipatternでないことを確認してください。

私は、ActionScriptについて知っているとは分かりませんが、通常、シングルトンインスタンスは静的変数としてクラスに格納されます。これは、あなたのサブクラスが親から静的変数を継承し、インスタンスも継承することを意味します!だから、そのことを念頭に置いて、あなたはインスタシットンを作ることができません。

シングルトンインターフェイスを作るのは、あなたのシングルトンすべてが、クリーンアンロード用のデストラクタなどの共通の機能を必要とする場合です。この作業を行うための他のハック(私はいくつか) - 私は倫理私はあなたに伝えることがわからないシングルトンは、散在(IMHO)よりよく使用されているためです。

-1

シングルトンは他のクラスと同様にクラス内で定義されており、必要に応じて継承することができます(継承します)。シングルトンのポイントはであり、は一度しかインスタンス化されません。継承については何も言いません。

質問は、それが便利ですか?試してみると、基本クラスで定義されている動作のほとんどを再実装(オーバーライド)する必要があることがわかります。あなたは最初から新しいクラスを開始するかもしれません。より良い方法は、代わりに必要な動作を定義するシングルトンインターフェイスを作成することです。

0

フレックスフレームワークは、このパターンをいくつかのマネージャーに利用します。

mx.core.SingletonのFlexコードを見ると、クラス名のマップをそのクラスのインスタンスに維持することで動作します。したがって、シングルトン用の最初のインスタンスが作成される前に、階層内の任意のクラスのインスタンスを作成できます。

-1

シングルトンクラスのコンストラクタはプライベートです!したがって、クラスXにプライベートコンストラクタがある場合、クラスYでサブクラス化しようとすると、コンパイラはpublic可視性を持たないため、Xクラスのsuper()コンストラクタを呼び出せないと言うでしょう。 Javaでは、シングルトンをサブライン化することはできません。/

関連する問題