Форум: "Основная";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
ВнизКак связать менеджер настроек и объект? Найти похожие ветки
← →
Kolan © (2006-07-04 13:23) [0]Здравствуйте,
Допустим есть экземпляр класса:
TClass = class
private
FA: Integer;
public
property A: Integer read FA write FA;
end;
И менеджер настроек, где сохранена настройка допустим так:
TManager = class
private
FASetting: Integer;
public
property ASetting: Integer read FASetting write FASetting;
end;
Вопрос: Как ассоциировать настройку со свойством класса TA?
Те. в менеджере должна быть процедура что-то вроде ApplySettings, которая установит свойство A объекта класса TA равное настройке в менеджере.
Иными словами как связать эти две веши?
Желательно, чтобы класс TA ничего не знал о сушествовании менеджера настроек.
PS
И еще может быть сложная иерархия где, допустим экземпляр TA исопльзуется не на прямую а через ряд других обектов... итд
← →
Kolan © (2006-07-04 14:37) [1]Может как-то в менеджере настроек сохранять адрес переменной? А как?
← →
Bel © (2006-07-04 15:41) [2]> Те. в менеджере должна быть процедура что-то вроде ApplySettings
Такой вариант устроит?:TManager = class
private
FASetting: Integer;
procedure SetASettings(Value: Integer);
public
property ASetting: Integer read FASetting write SetASetting;
end;
> Желательно, чтобы класс TA ничего не знал о сушествовании менеджера настроек.
Главное, чтобы менеджер настроек знал о существовании класса ТА.
← →
Мефисто (2006-07-04 15:45) [3]
> Главное, чтобы менеджер настроек знал о существовании класса
> ТА.
Дык, автор о том и вопрошает :)
← →
Kolan © (2006-07-04 15:50) [4]
> procedure SetASettings(Value: Integer);
Дык а что внутри?
Ситуация такая:
Есть два класса
TA и TB
С классом ТА работать на прямую нельзя ни как, только через ТВ, но в классе ТА есть свойства который надо изменять по команде пользователя.
Можно сделать доступным класс ТА создав соотв. свойство в ТВ, но тогда нарушится моя архитектура. И к томуже, в действительности иерархия довольно глубокая до 7 - 10 классов...
Как бы добраться до ТА не изменяю архитектуру.....
← →
Kolan © (2006-07-04 15:56) [5]Пример этого всего - класс для работы с ком портом. Его использует поток, затем еще выделение пакетов, затим еще махинации, потом класс отвечающий за всю связь, потом разбор пакета, потом класс отвечающий за работу с устройством, менеджер еще один.
А нужно дать пользователю возможность изменить номер порта. Соотв. св-во есть у класса для работы с портом, но как до туда долезьть, не портя все незнаю....
← →
Deka © (2006-07-04 16:11) [6]Может отправить ему сообщение?
← →
Мефисто (2006-07-04 16:12) [7]
> Пример этого всего - класс для работы с ком портом. Его
> использует поток, затем еще выделение пакетов, затим еще
> махинации, потом класс отвечающий за всю связь, потом разбор
> пакета, потом класс отвечающий за работу с устройством,
> менеджер еще один
Чего-то ты загнул :)
Как я понял классов ТMyClass может быть несколько, а ТManager один? Т.е. менеджер уроавляет кучей классов ТMyClass?
Если так, то кода тебе еще написать надо кучу.
Например у класса ТMyClass сделать свойство для конекта менеджера.
ТА.Manager := ...
Далле при назначении менеджера - ТMyClass класс, добавляет себя в список менеджера. При дисконекте менеджера от класса ТMyClass, он себя соотвественно из этого списка удаляет.
Раз контролируемых объектов несколько, то менеджер еще толжен содержать список контролируемых объектов, например хранить на них ссылки в TList. Т.е. добавление/удаление классов ТMyClass и обработка TList для того чтобы пробежаться по всем контролируемвым классам и изменить нужные свойства.
Второй вариант это использовать интерфейсы, если не охота со свойствами офигенной степенни вложенности париться. Т.е. менеджер смотрит: если данный объект поддерживает требуемый интерфейс, то он цепляет его себе в список и соотвественно должным образом обрабатывает.
← →
Kolan © (2006-07-04 16:14) [8]Можно, но только вообщем случае, а я хочу решить именно его, трудно будет это сделать. Настройки бывают разные и строки и числа... И много их...
← →
Мефисто (2006-07-04 16:16) [9]
> контролируемых объектов, например хранить на них ссылки
> в TList. Т.е. добавление/
А нуда, есть еще замечательная такая штука как коллекции.
← →
Kolan © (2006-07-04 16:35) [10]
> Как я понял классов ТMyClass может быть несколько, а ТManager
> один
Почти так, но менеджер управляет экземплярами совершенно разных классов.
Над остальным думаю...
← →
Мефисто (2006-07-04 16:40) [11]Kolan © (04.07.06 16:35) [10]
В твоем случае.
1. Если у разных классов есть одинаковые имена свойтсв, то можно обратиться к RTTI (погугли, инфа в инете есть)
2. Как уже говорил использовать интерфейсы.
← →
Phoroon~ © (2006-07-04 16:43) [12]Kolan
Как мне кажется, в данном случае правильнее (с точки зрения программирования) будет использовать интерфейс.
← →
Kolan © (2006-07-05 00:54) [13]
> Если у разных классов есть одинаковые имена свойтсв,
Нет, лучьше считать, что вре разное.
> 2. Как уже говорил использовать интерфейсы.
Итак.
1. В классе, который хочу "настраивать" делаю интерфейс со свойством А.
> Второй вариант это использовать интерфейсы, если не охота
> со свойствами офигенной степенни вложенности париться. Т.
> е. менеджер смотрит: если данный объект поддерживает требуемый
> интерфейс, то он цепляет его себе в список и соотвественно
> должным образом обрабатывает.
>
2. Ихсодя из из этого пологаю, что в менеджер поключены модули с выше описанным интерфейсом.
3. Проверить поддерживается ли интерфейс смогу.
4. "то он цепляет его себе в список " - вот тут проблемма... Как это сделать?
Если что не так поправте.. :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.039 c