LINUX.ORG.RU

[java]Как бы реализовать пользовательский контекст?

 


0

0

В общем виде задача: есть куча объектов, часть из них имеет свое графическое представление. Нужно чтобы любой объект созданный в каком либо методе другого объекта умел наследовать некоторый контекст (там пачка различных переменных).

В принципе, можно тупо добавить в конструктор еще один параметр, в который передавать this или this.context, но это слишком кучеряво.

★★☆

Ответ на: комментарий от iZEN

как я почитал, это не то. Список переменный у разных объектов (не классов!) может быть разным, эдакое "окружение" сейчас оно мудрено наследуется к родителю (тому кто создал сей объект) и если в текущем окружении значение переменной не найдено, то она спрашивается у родителя и т.д.

хотя щас надо выспаться и подумать лучше.

wfrr ★★☆
() автор топика
Ответ на: комментарий от WFrag

Нельзя ибо все объекты находядтся в swing thread (ну да есть фреймы...), но получится херня.

wfrr ★★☆
() автор топика
Ответ на: комментарий от iZEN

надо будет поглядеть, но прозреваю тут нужно от языка чтобы он мог позволять определять откуда был вызван конструктор.

wfrr ★★☆
() автор топика

abstract class ContextUser {
    protected Context context;

    protected <T extends ContextUser> T createContextUser(Class<T> c) {
        T rv = c.newInstance();
        rv.context = context;
        return rv;
        
    }
}

Не очень красиво, правда, и вместо конструкторов с параметрами придётся использовать всякие инициализирующие методы.
Может с генериками чего напутал, но общая идея думаю понятна.

Legioner ★★★★★
()
Ответ на: комментарий от iZEN

> Прошвырнись по паттернам, может что подойдёт. (State, Strategy и т.д.)

Никогда, НИКОГДА так не делай. Про паттерны надо прочитать и тут же забыть их напрочь. О них надо вспоминать ТОЛЬКО тогда, когда 15 минут реализуешь что-то, что придумал под конкретно эту задачу, а потом вспоминаешь, что енто ж паттерн "фигня неведомая" и ещё за 5 минут пишешь реализацию.

Смотреть по паттернам, вдруг что подойдёт -- вернейший способ набыдлокодить неподдерживаемое говно, где паттерн на паттерне сидит и паттерном погоняет, хотя ни один из них там не нужен. Но модно же, блджадт.

kemm
()
Ответ на: комментарий от wfrr

>надо будет поглядеть, но прозреваю тут нужно от языка чтобы он мог позволять определять откуда был вызван конструктор.

Есть такой вариант:

new Throwable().getStackTrace()[1].getClassName();
new Throwable().getStackTrace()[1].getMethodName();

Никогда не используйте для реализации логики :)

Также узнать вызывающий класс можно (в Sun JDK):

sun.reflect.Reflection.getCallerClass(int level);

Тоже никогда его не используйте :)

WFrag ★★★★
()
Ответ на: комментарий от WFrag

Ахренеть, кучерявее некуда. Только вот нужно не класс а объект 8).

wfrr ★★☆
() автор топика
Ответ на: комментарий от Legioner

ммм, возникает вопрос нафига это если так сложнее чем передавать в конструктор напрямую?

wfrr ★★☆
() автор топика
Ответ на: комментарий от k0l0b0k

> очень интересная мысль.

Супер-пупер-модные "паттерны проектирования" -- это сборник маленьких рецептов для достаточно частых проблем. Но так как половина (в лучшем случае половина, а то и все 99%) современных программистов на высокоуровневых языках вроде java/c++/c#/что_там_ещё_из_модного думать категорически не способны, они начинают не решать проблему, а городить эти паттерны. В итоге вместо простого и понятного "нешаблонного" решения получается пирамида в 2-4 паттерна. В лучшем случае.

В худшем -- паттернист является архитектором проекта, поэтому архитектура превращается в "есть паттерн Неведомая Фигня, куда бы его тут засунуть?! О, вот сюда впихнём, только тогда придётся чесать левое ухо правой ногой, но зато мы будем использовать все возможные Паттерны!" Тьфу.

kemm
()
Ответ на: комментарий от kemm

>В худшем -- паттернист является архитектором проекта, поэтому архитектура превращается в "есть паттерн Неведомая Фигня, куда бы его тут засунуть?! О, вот сюда впихнём, только тогда придётся чесать левое ухо правой ногой, но зато мы будем использовать все возможные Паттерны!" Тьфу.

видел такое своими глазами. подтверждаю.

k0l0b0k ★★
()
Ответ на: комментарий от wfrr

А чё буржуинские наречия-то не учишь? Вся свежая грамотная литература на ихнем языке ведь.

mv ★★★★★
()
Ответ на: комментарий от mv

Какбы знаю в досточной мере для чтения документации, но не "научных статей о парадигмах" кои даже на русском иногда пишутся так что нихрена не понятно пока не увидишь код.

wfrr ★★☆
() автор топика
Ответ на: комментарий от mv

Таки не оно как оказалось там компилятор как и в AOP, а это недопустимо. Блин в java же передается securitycontext чтоб для пользоваельских извратов такой механизм не оставить.

wfrr ★★☆
() автор топика
Ответ на: комментарий от wfrr

Блин, кажется теперь понятно как его передавать!

wfrr ★★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.