Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];

Вниз

реализация шаблона Singleton   Найти похожие ветки 

 
Tyke   (2002-11-21 15:23) [0]

Коллеги, реализовывал ли кто шаблон Singleton?
Попытался реализовать, смутило отсутствие в Delphi переменных класса и ещё кое-что. Кто реализовывал, расскажите про своё решение.


 
Calm   (2002-11-21 15:30) [1]

Я, конечно, извиняюсь, но что это такое - "шаблон Singleton"?


 
MBo   (2002-11-21 15:31) [2]

>Tyke
Есть классовые процедуры и функции (Class function ), так что, введя в модуле класса внутреннюю переменную, нетрудно реализовать Singleton


 
MBo   (2002-11-21 15:32) [3]

Calm
Шаблонов у нас нет, а singleton - объект, могущий существовать лишь в единственном экземпляре


 
evgeg   (2002-11-21 15:37) [4]

В Дельфи шаблон "одиночка" не нужен. Он нужен в языках, не поддерживающих модули, таких как C++.

В интерфейсе модуля определяете нужные функции. Данные храните в переменных их секции implementation. Вот вам и одиночка -- модуль.

> Шаблонов у нас нет

Шаблон тут употребляется в другом смысле, не так, как структура языка С++ template, а как типовое решение.


 
VaS   (2002-11-21 17:01) [5]


interface

type
TMy = class
public
procedure Func;
end;

function GetMy: TMy;

implementation

var
My: TMy = nil;

function GetMy: TMy;
begin
if My = nil then
My:=TMy.Create;
Result:=My;
end;

...

finalization
FreeAndNil(My);
end.


И радостно вызываем где угодно GetMy.Func().


 
down   (2002-11-21 17:14) [6]

http://www.delphikingdom.com/article/singleton.htm


 
Tyke   (2002-11-22 13:04) [7]

Спасибо всем кто ответил и не ответил тоже :-)

2 VaS ©
И так же радостно мы где угодно можем вызвать TMy.Create;
И получим кучу новых экземляров.

2 down
Спасибо за линк на статью, дала ответы на кое-какие вопросы.
И добавила новые вопросы :-).
Очень удивился когда узнал о таком поведении локальной типизированной константы. Но как поле класса она стопроцентно не может заменить, область видимости у ней только метод или процедура. Поэтому, что применять: локальную типизированную константу или скрытую в implementation переменную мне кажется дело вкуса.

Кстати пример описанный в данной статье, не полностью удовлетворяет требованиям шаблона Singleton. Сделайте:
P1 := TProgressor.Instance;
P2 := TProgressor.Instance;
P1.ReleaseInstance;
P3 := TProgressor.Instance;

Ооопс! Получили ещё один экземпляр.

Шаблон я реализовал, с применением переменной в implementation. Но всё равно не красиво как-то.


 
VaS   (2002-11-22 14:18) [8]

> И так же радостно мы где угодно можем вызвать TMy.Create;
> И получим кучу новых экземляров.

Так помести определение TMy в implementation и проблемы нет.



 
Tyke   (2002-11-22 23:10) [9]

> Так помести определение TMy в implementation и проблемы
> нет.

А как ты тогда получишь объект если тип TMy виден только внутри модуля. Попробуй обратись к переменной, которая в implementation :-)


 
VaS   (2002-11-23 10:31) [10]

А так? :)


interface

type
IMy = interface
["{55056794-DD76-4EB4-B675-5CA1C214DABE}"]
procedure Func;
end;

function GetMy: IMy;

implementation

type
TMy = class(TInterfacedObject, IMy)
public
procedure Func;
end;

var
My: IMy = nil;

function GetMy: IMy;
begin
if My = nil then
My:=TMy.Create;
Result:=My;
end;

procedure TMy.Func;
begin
//
end;

initialization
finalization
My:=nil;
end.


 
Юрий Зотов   (2002-11-23 10:46) [11]

Все просто.

interface

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

implementation

var
My: TMy = nil;

class function TMy.NewInstance: TObject;
begin
if My = nil then
begin
Result := inherited NewInstance;
My := Result
end
else Result := My
end;

procedure TMy.FreeInstance;
begin
inherited;
My := nil
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.21 c
1-4407
Bublichek
2002-11-22 15:50
2002.12.02
Нужна помощь!


1-4268
Alex_Sudakov
2002-11-18 11:06
2002.12.02
Сервер приложений


1-4379
VJar
2002-11-19 21:59
2002.12.02
Ограничение ComboBox


3-4207
Antey
2002-11-13 16:10
2002.12.02
SQL- запрос


1-4430
mazepa
2002-11-19 21:54
2002.12.02
exel





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский