![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
AlexKozlov |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 16.12.2008 Репутация: 1 Всего: 1 |
Предположим есть у меня некоторый класс, назначение которого иммитировать наличие чего-то реального, в то время как оно еще качается по сети, считается и т.д. Простейший пример - пусть есть класс EmptyPicture, который выводит пустой прямоугольник пока картинка грузится из инета.
А хочется мне чтобы по завершении загрузки, объект этого класса подменил себя на объект класса PNGPicture (JPEGPicture, BMPPicture и т.п.). Естественно предполагается что все классы имеют общий интерфейс Picture, через который к ним и обращаются, так что никакого криминала при подмене не произойдет. Чего не хочется: 1) делать в каком либо виде адаптер, который по сути лишнее звено. 2) уведомлять все объекты имеющие ссылку на объект EmptyPicture, что им нужно ее поменять В идеале должно быть что-то вроде onLoadDone(Picture p){ this=p; // Так к сожалению не выходит } Возможно ли что то подобное? Или оно невозможно в принципе? Как-то сразу возникает мысль о проблемах с thread-safe |
|||
|
||||
firedrago |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 22.9.2005 Репутация: 2 Всего: 3 |
в принцепе ничего не понял из вышенаписанного, но есть подозрение что Вам надо что-то типа
|
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Так есть же паттерн, который называется Lazy Initialization. Его еще в синглтоне применяют часто. Собственно проблемы с thread-safety оттуда распространяются и сюда, поэтому способы решения этих проблем тут так же применимы.
Можно написать прокси-класс, который будет как раз заниматься ленивой подгрузкой. Я так помимаю, именно этого вам делать и не хочется? Это не так уж и плохо, как кажется. В книге по паттернам у Фрименов, кстати, есть пример прокси, который обеспечивает ленирую загрузку фигуры. |
|||
|
||||
firedrago |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 22.9.2005 Репутация: 2 Всего: 3 |
Stolzen, Lazy Initialization в моем понимании было всегда что-то типа
Lazy initialization means that you do not initialize objects until the first time they are used. Typically, this comes about when you are unsure of what initial value an instance variable might have but want to provide a default. Rather than initialize explicitly in the constructor (or class static initializer), it is left until access time for the variable to be initialized, using a test for null to determine if it has been initialized. For example: public getSomething( ) { if (something == null) something = defaultSomething( ); return something; } или я чего-то не знаю? |
|||
|
||||
Stolzen |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Вам не кажется, что у этих кусков кода есть что-то общее? ![]() |
||||
|
|||||
firedrago |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 22.9.2005 Репутация: 2 Всего: 3 |
Stolzen,
![]() ![]() |
|||
|
||||
AlexKozlov |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 16.12.2008 Репутация: 1 Всего: 1 |
firedrago, поняли вы абсолютно правильно, но как раз именно от таких конструкций мне хочется отойти. На мой взгляд это получается слишком громоздко.
|
|||
|
||||
firedrago |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 22.9.2005 Репутация: 2 Всего: 3 |
AlexKozlov,
![]() это правильное OOP с использованием интерфeйсов, наследования и т.д. все остальное - это изобретение велосипеда с квадратными колесами.....по крайней мере, это мое мнение Это сообщение отредактировал(а) firedrago - 22.11.2011, 15:26 |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |