Одиночный шаблон smalltalk: как инициализировать переменные экземпляра? - PullRequest
10 голосов
/ 13 января 2009

У меня проблемы с получением шаблона синглтона для инициализации переменной экземпляра в smalltalk. (здесь ссылка на другую реализацию для пояснения)

вот что у меня есть:

new

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

эта последняя строка (UniqueInstance: instanceVar: = Object new.) Не работает, но это в основном то, что мне нужно сделать: создать экземпляр instanceVar как Object перед возвратом UniqueInstance вызывающей стороне.

Обратите внимание, что этот «новый» метод используется в качестве экземпляра класса, и что библиотеки являются переменной экземпляра UniqueIsntance (isntance требуемого класса).

Кто-нибудь может указать мне правильное направление?

1 Ответ

11 голосов
/ 13 января 2009

Попробуйте проще:

YourClass class>>singleton

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

затем на стороне экземпляра вашего класса реализуйте соответствующий метод #initialize, например:

YourClass>>initialize

          someInstvar := someInitalValue.
         ^self

Обновление: : Имя метода класса, обращающегося к синглтону, различается, это может быть #default, #current или #singleton. Я в основном использую позже.

...