Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как создать объект с глобальной видимостью? [D7, XP]


Страницы:   1 2

neveGreen ©   (2008-12-07 23:07:00) 

Как создать объект с глобальной видимостью, чтобы он был видим как Application?


Джо   (2008-12-11 02:42:00) [1]


> Ins ©   (10.12.08 17:06) [23]

Функия Singleton тут избыточна.
Вызывайте конструктор класса, сколько будет угодно :)


Ins   (2008-12-10 17:06:00) [2]


> народ там уже начал предлагать альтернативы :)


Ну не нравится мне такая реализация :) Если быть совсем придирчивым, то пример Юрия не всем требованиям к синглтону удовлетворяет. Класс не только должен гарантировать существование единственного экземпляра, но и предоставлять к нему точку доступа. Остальные способы доступа хорошо бы сделать недоступными. Нехорошо получится, если кто-то попытается в обход функции Singletone вызвать конструктор. Ну и породить новый синглтон должно быть максимально просто, без лишних телодвижений в виде объявления переменных/функций доступа. А про NewInstance - это верное замечание.


Григорьев Антон   (2008-12-10 16:29:00) [3]


> Юрий Зотов ©   (10.12.08 14:59) [21]
> Отметился...
> :o)

Да, я уже видел :) Тема поднята, народ там уже начал предлагать альтернативы :)


Юрий Зотов   (2008-12-10 14:59:00) [4]


> Григорьев Антон ©   (09.12.08 08:56) [13]

Отметился...
:o)


neveGreen   (2008-12-09 21:13:00) [5]


> Юрий Зотов ©   (09.12.08 21:04) [19]

Ха... а я сделал его потомка!!!! :)


Юрий Зотов   (2008-12-09 21:04:00) [6]

> neveGreen   (09.12.08 21:00) [18]

Странный вопрос. Как и в любой другой класс, конечно.


neveGreen   (2008-12-09 21:00:00) [7]


> Юрий Зотов ©   (08.12.08 01:10) [8]

и как добавить свойство или метод в него?


oxffff   (2008-12-09 15:42:00) [8]


> clickmaker ©   (09.12.08 13:05) [15]


Естественно следует не забывать о выполняемом коде переинициализации.
А именно о коде конструкторов и коде AfterConstruction(который выполняется при вызове с параметром классовой ссылки ну или хитро помутив dl регистр).


oxffff   (2008-12-09 15:29:00) [9]


> clickmaker ©   (09.12.08 13:05) [15]


Проверка на if _Singleton = nil then делается в

class function TSingleton.NewInstance: TObject;


clickmaker   (2008-12-09 13:05:00) [10]

> [14] oxffff ©   (09.12.08 09:39)

смысл этой поправки?


oxffff   (2008-12-09 09:39:00) [11]

Юрий Зотов ©   (08.12.08 01:10) [8]

Позволите чуть поправить?

function Singleton: TSingleton;
begin
if _Singleton = nil then
  TSingleton.Create(..);
Result := _Singleton
end;

на

function Singleton: TSingleton;
begin
Result := TSingleton.Create(..);
end;


Григорьев Антон   (2008-12-09 08:56:00) [12]


> Юрий Зотов ©   (08.12.08 01:10) [8]
> Прочитал материал по ссылке...

Юрий, что ж ты это только здесь написал? Скоро ветка уйдёт в архив, и твои поправки будет найти очень трудно. А продублировал бы это ещё и комментариях к самой статье, и все, кто её читает, тоже увидели бы твои замечания.


Юрий Зотов   (2008-12-09 00:09:00) [13]

> neveGreen   (08.12.08 23:55) [11]

Если изменили код - возможно.


neveGreen   (2008-12-08 23:55:00) [14]


> Юрий Зотов ©   (08.12.08 01:10) [8]

Stack Overflow ???


neveGreen   (2008-12-08 23:35:00) [15]

Спасибо. А наблюдатель как я понимаю можно просто сделать на TActionList ?


Германн   (2008-12-08 01:27:00) [16]


> Юрий Зотов ©   (08.12.08 01:10) [8]
>
> Прочитал материал по ссылке...
>
> "Беда, коль пироги начнет печи сапожник..."
> (c) И.А. Крылов.
>

И уж в который раз такое.
Ну а как нам с Амёбой жить далее? Если даже статьи на Королевстве не внушают доверия!
:)


Юрий Зотов   (2008-12-08 01:10:00) [17]

Прочитал материал по ссылке...

"Беда, коль пироги начнет печи сапожник..."
(c) И.А. Крылов.

Прежде, чем писать статьи, автору не помешало бы заглянуть в код TObject или хотя бы в справку. И там он нашел бы два вполне симпатичных метода - NewInstance и FreeInstance. Что избавило бы его от нагромождения целой кучи совершенно лишнего кода при реализации синглтона.

unit SingletonUnit;

uses ...

type
 TSingleton = class(...)
 ...
 public
   class function NewInstance: TObject; override;
   procedure FreeInstance; override;
 end;

function Singleton: TSingleton; // Для получения экземпляра

implementation

var
 _Singleton: TSingleton;

function Singleton: TSingleton;
begin
 if _Singleton = nil then
   TSingleton.Create(..);
 Result := _Singleton
end;

class function TSingleton.NewInstance: TObject;
begin
 if _Singleton = nil then
   _Singleton :=  TSingleton(inherited NewInstance);
 Result := _Singleton;
end;

procedure TSingleton.FreeInstance;
begin
 inherited;
 _Singletone := nil
end;

initialization
 Singleton; // Этого можно и не делать, создание будет по первому запросу
finalization
 _Singleton.Free
end.


Amoeba   (2008-12-07 23:43:00) [18]

Например так:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=267


neveGreen   (2008-12-07 23:33:00) [19]

я хочу сделать синглтон но чёто не соображу как...


Anatoly Podgoretsky   (2008-12-07 23:26:00) [20]

> neveGreen  (07.12.2008 23:07:00)  [0]

Application не является глобально видимым объекту, а еще точнее, таких объектов нет. Видимостью управляет программист.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо