Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 30.08.2013
Сообщений: 8
1
RAD XE3+

Фабрика классов и TObjectList

17.08.2020, 13:33. Показов 751. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Посмотрите, пожалуйста, код.
Делал проект в Delphi XE 10.2 Lite (Проект в приложенном архиве).
Описание:
Я реализую в данном проекте фабрику классов, чтобы можно было в дальнейшем расширять проект.
Структура проекта:
1) файл ClassFactory - в нем сама абстрактная фабрика и синглтон.
Также в нем менеджер фабрик - его я сделал как нулевой элемент массива FactoryList: TObjectList (на будущее возможно
будет несколько менеджеров, потому сразу так сделал)

2) файл ORM - здесь объектно-реляционная модель
В этом файле 2 конкретные фабрики и 2 класса, которые они должны создавать.
Т.е. фабрика пользователя создает форму пользователя и фабрика документов создает форму работы с документами.

3) Фабрики конкретные (2 штуки) создаются в файле ORM в разделе initialization

4) при отладке поставьте точки останова в файле ClassFactory
в constructor TFactoryInterface.Create(id: byte); - конструктор создания фабрики
и в function TFactory.registerFactoryInterface(factory_interface: TFactoryInterface): boolean; - здесь фабрики помещаются в
массив reg_ifaces менеджера фабрик (нулевой элемента массива FactoryList)
В этих двух методах вы увидите как фабрики обе нормально создаются и их ID присваиваются 1 и 2 соответственно - для
этого можете в Watch при отладке поместить такие переменные:
TFactory(FactoryList[0]).reg_ifaces[0].ID_WINDOW
TFactory(FactoryList[0]).reg_ifaces[1].ID_WINDOW

5) как только вы в отладке дойдете до вызова TFactory(FactoryList[0]).OpenWindow(USER_FORM) из основного файла проекта (Project1.dpr - его можете открыть через вкладку Project - View Source), то при вызове этого метода будет вызван методв CreateInstance Фабрики с ID=1. Он вызывает UserForm := TUserForm.Create(Application);
После чего ID фабрик почему-то меняются на 1 и 1. бывают и другие значения.
Если отладить глубже, то я ушел в отладке в Vcl.Forms.
Там на строке 3642 написано:
if not InitInheritedComponent(Self, TForm) then - после этого значения ID фабрик почему-то меняются. не знаю почему.
raise EResNotFound.CreateFmt(SResNotFound, [ClassName]);

6) как примечание: если вторую фабрику пока вообще убрать, то все окей. и значение первой фабрики сохраняется на протяжении всего цикла работы программа = 1. программа работает.
Вложения
Тип файла: rar фабрика и TObjectList.rar (11.25 Мб, 15 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.08.2020, 13:33
Ответы с готовыми решениями:

Можно ли в TObjectList добавлять TObjectList-ы?
Подскажите в TObjectList можно добовлть TObjectList-ы

Фабрика классов
Всем привет. Изучая COM, набрел на фабрику классов. Я так понял, что фабрика классов, это...

Фабрика обьектов и названия классов
Вопрос следующий: как можно получить название класса в виде строки, ну или как вариант превратить...

Фабрика классов: ковариантные возвращаемые типы не поддерживаются в управляемых типах
Добрый день. Имеются 2 интерфейса: 1. IEmployeeAbstractFactory - представляет фабрику;...

3
0 / 0 / 0
Регистрация: 30.08.2013
Сообщений: 8
17.08.2020, 14:47  [ТС] 2
Все, разобрался. Надо было также создать указатель на вторую фабрику.
Когда остается какая-нибудь ссылочка на объект, то он не удаляется, не обнуляется.
Я сделал еще один указатель глобальный, как на первую фабрику, только на вторую. И значения ID остаются
0
Модератор
3491 / 2614 / 741
Регистрация: 19.09.2012
Сообщений: 7,976
17.08.2020, 14:50 3
Не увидел, где FactoryList создается
0
0 / 0 / 0
Регистрация: 30.08.2013
Сообщений: 8
17.08.2020, 14:59  [ТС] 4
Но если у кого будут предложения по более корректному исполнению кода, то буду рад обсудить
0
17.08.2020, 14:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.08.2020, 14:59
Помогаю со студенческими работами здесь

TObjectList
у меня есть список TDocumentList (хранит не объекты а "указатель на него" ) как мне удалить 4...

TObjectList
Спасибо за ответ. Я уже разобрался со Своиствами и Событиями. Теперь хочу разобраться с...

Работа с TObjectList
Здравствуйте, не могу понять, как можно осуществить запись координат(х,у) в TObjectList. То...

Сортировка TObjectList
Не получается организовать свою сортировку листа. function MyCompare(AItem, BItem: TL2Item):...

Добавление элемента в TObjectList
Доброе утро всем! Решил потыкать TObjectList и столкнулся с небольшой проблемкой - не могу...

TObjectList и работа с классами
Ребят, подскажите плиз, немного не догоняю принцип работы с классами. Создаю класс TCashList...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru