10

smalltalk でインスタンス変数を初期化するシングルトン パターンを取得するのに問題があります。(明確にするために、別の実装へのリンクを次に示します)

これは私が持っているものです:

new

^UniqueInstance ifNil: [UniqueInstance := self basicNew.
                        UniqueInstance: instanceVar := Object new. ].

最後の行 (UniqueInstance: instanceVar := Object new.) は機能しませんが、これが基本的に必要なことです。UniqueInstance を呼び出し元に返す前に、instanceVar をオブジェクトとしてインスタンス化します。

この「新しい」メソッドはクラスのインスタンス化として使用され、ライブラリは UniqueIsntance (必要なクラスのインスタンス) のインスタンス変数であることに注意してください。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

11

もっと簡単に試してください:

YourClass class>>singleton

       UniqueInstance ifNil: [UniqueInstance := self basicNew initialize].
       ^UniqueInstance

次に、クラスのインスタンス側で、適切な #initialize メソッドを実装します。次に例を示します。

YourClass>>initialize

          someInstvar := someInitalValue.
         ^self

更新::シングルトンにアクセスするクラス メソッドの名前はさまざまで、#default、#current、または #singleton のいずれかです。あとで使うことが多いです。

于 2009-01-13T12:19:06.787 に答える