![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Если только это раздражает - сделай класс нестатическим и передавай всем кому надо
если тяжело передавать - сделай синглтоном. Вроде здесь проблем быть не может. Вообще синглтон всегда гибше статик-класса - с ним можно больше вещей сделать. Просто у него чуть выше "overhead", т.е. Math.instance.cos(a) смотрелось бы дико (да и обращение бы дольше выполнялось). А здесь то: И погнал использовать внутри этого класса поле _dynamicClass. Даже с тестами все в разы проще, чем со статиком, пример подмены класса на фейковый: private var _dynamicClass:DynamicClass; public function ClassUnderTest(dynamicClass:DynamicClass = null)// конструктор { _dynamicClass = dynamicClass != null ? dynamicClass : DynamicClass.instance; } // Использование в приложении var instance:ClassUnderTest = new ClassUnderTest(); // Тестирование var fake:FakeDynamicClass = new FakeDynamicClass(); var instance:ClassUnderTest = new ClassUnderTest(fake); instance.method(); assertEquals("нужное значение", fake.field); // Использование в приложении var instance:DynamicClass = DynamicClass.instance; // Тестирование var instance:DynamicClass = new DynamicClass();// А мы эксепшенов не кидаем :) // Тестирование, если таки кидаем исключения в get instance: var instance:DynamicClass = DynamicClass.instance; instance.resetForTest();// Придется метод добавить, но кто говорил что синглтоны тестировать легко? Последний раз редактировалось expl; 12.02.2012 в 21:43. |
|
|||||
|
Дык присвой полю это Class.getInstance() - чтобы код класса не засоряло.
А вообще, если тебя не злит: - невозможность наследования; - невозможность передать в качестве параметра; - проблемы с тестированием; - затрудненная инициализация класса (хотя с синглтонами не намного лучше); используй статики на здоровье. Как-бы я знаю только такие способы обеспечения доступа к объекту: - сделать публичный статический метод/поле, возвращающий объект (синглтон сюда тоже относится) - передавать объект в конструктор - передавать объект в метод - передавать объект в поле - сделать сам класс публичным статическим (никаких объектов!) - использовать IoC контейнер для автоматической передачи через конструктор/метод/поле - создать событие "ДАЙТЕ МНЕ ПРОВАЙДЕР", сохранить в событии ссылку на клиента провайдера, послать баблингом вверх по цепочке, где-то вверху поймать, узнать клиента, присвоить полю клиента этот провайдер. Теперь у клиента есть ссылка на провайдер, хотя он понятия не имел где тот находится - ура ![]() Ну что-то же из этого должно нравиться!? Последний раз редактировалось expl; 12.02.2012 в 22:36. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:20. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| single , static |
|
|