Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.042 c
1-1152173646
Dimedrol
2006-07-06 12:14
2006.08.20
Большие массивы для HASH


2-1154502870
Ironman83
2006-08-02 11:14
2006.08.20
Цвет ячеек в сетке.


4-1146219048
Creative
2006-04-28 14:10
2006.08.20
как избавиться от мерцания?


15-1153766168
Степан
2006-07-24 22:36
2006.08.20
RLINK32: Error opening file "Unit_MainForm.dpr" ?!?!?!


15-1153739936
Gydvin
2006-07-24 15:18
2006.08.20
Отдых в Баян-ауле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский