Smalltalk singleton pattern: как инициализировать переменные экземпляра?
У меня возникли проблемы с получением шаблона singleton для инициализации переменной экземпляра в smalltalk. (здесь ссылка на другую реализацию для пояснения)
это то, что у меня есть:
new
^UniqueInstance ifNil: [UniqueInstance := self basicNew.
UniqueInstance: instanceVar := Object new. ].
что последняя строка (UniqueInstance: instanceVar: = Object new.) не работает, но в основном что мне нужно сделать: экземпляр instanceVar как объект перед возвратом UniqueInstance обратно вызывающему.
Обратите внимание, что этот "новый" метод используется как условие включения класса, а библиотеки - это переменная экземпляра UniqueIsntance (isntance желаемого класса).
Может ли кто-нибудь указать мне в правильном направлении?
Ответы
Ответ 1
Попробуйте проще:
YourClass class>>singleton
UniqueInstance ifNil: [UniqueInstance := self basicNew initialize].
^UniqueInstance
то на стороне экземпляра вашего класса реализуется соответствующий метод #initialize, например:
YourClass>>initialize
someInstvar := someInitalValue.
^self
Обновление:. Имя метода класса, обращающегося к Singleton, меняется, оно может быть #default, #current или #singleton. В основном я использую позже.