Форум: "Прочее";
Текущий архив: 2013.10.06;
Скачать: [xml.tar.bz2];
ВнизНужен третейский судья :) Найти похожие ветки
← →
_oxffff (2013-04-24 16:05) [200]Удалено модератором
← →
Inovet © (2013-04-24 16:06) [201]Удалено модератором
← →
DevilDevil © (2013-04-24 16:07) [202]Удалено модератором
← →
Ega23 © (2013-04-24 16:07) [203]
> И если ты как интуит потребуешь доказательство, что такой
> подход где-то применяется, то я сообщаю, что многие библиотеки
> поставляются с примерами и шаблонами приложений/модулей.
Есть юнит с контролом, есть юнит с функцией Register. Сплошь и рядом.
← →
euru © (2013-04-24 16:07) [204]
> _oxffff (24.04.13 15:32) [185]
А чем реализация через абстрактный класс лучше реализации через интерфейс?
Из недостатков:
1.var Stuff: TStuff;
. . .
Stuff := TStuff.GetInstance;
. . .
Stuff.Free;
Если этот синглтон хранит состояния, то они будут потеряны.
2. Насколько я помню, такой код не откомпилируется в D7.
← →
Компромисс1 © (2013-04-24 16:08) [205]Удалено модератором
← →
Компромисс1 © (2013-04-24 16:09) [206]Ega23 © (24.04.13 16:07) [203]
Да, точно. Спасибо. Я уже и забыл, как компоненты регистрировал.
← →
DevilDevil © (2013-04-24 16:11) [207]> _oxffff (24.04.13 16:02) [197]
> Если ты хочешь выбирать разные режимы сборки своего приложения
> в compile time, то естественно define.
> Если ты хочешь выбирать разные режимы в run-time, то реализуй
> соответствующий подход(например один из паттернов).
>
> Синглетон то здесь причем?
если возвращаться к [0]
то Розыч спутал причину со следствием
он счёт define своего рода реализацией синглетона
на самом деле define - это режим в рамках которого есть синглетон
← →
_oxffff (2013-04-24 16:15) [208]
> euru © (24.04.13 16:07) [204]
>
> > _oxffff (24.04.13 15:32) [185]
>
> А чем реализация через абстрактный класс лучше реализации
> через интерфейс?
Собственно я не рассматривал вопрос в такой постановке. :)
Я просто поставил задачу внести реализацию в namespace класса
P.S. Что касаемо Вашего кода, то время жизни объекта тоже вызывает вопросы. ;)
← →
Аббат Пиккола (2013-04-24 16:15) [209]Удалено модератором
← →
DevilDevil © (2013-04-24 16:16) [210]Удалено модератором
← →
Компромисс1 © (2013-04-24 16:19) [211]
> может (а следовательно, и должен)
Мне кажется, тут есть логическая ошибка.
С остальным согласен :)
← →
Inovet © (2013-04-24 16:21) [212]Удалено модератором
← →
Аббат Пиккола (2013-04-24 16:21) [213]Удалено модератором
← →
Компромисс1 © (2013-04-24 16:26) [214]Удалено модератором
← →
DevilDevil © (2013-04-24 16:31) [215]> Аббат Пиккола (24.04.13 16:21) [213]
а мне кстати в таком виде не нравятся синглетоны
в С++ хотябы можно скрыть автоматическую проверку на NULL, и для программиста это будет обычная переменная с обычным обращением
а вот обращение по функции мне кажется некрасиво
мне ближе объявление глобальной переменной и вызов InitializeMainFoo() например
← →
Аббат Пиккола (2013-04-24 16:41) [216]Удалено модератором
← →
DevilDevil © (2013-04-24 16:43) [217]> Аббат Пиккола (24.04.13 16:41) [216]
а глобальная функция вместо переменной кто ? )
← →
Юрий Зотов © (2013-04-24 16:44) [218]Удалено модератором
← →
Аббат Пиккола (2013-04-24 16:52) [219]Удалено модератором
← →
DevilDevil © (2013-04-24 16:53) [220]Удалено модератором
← →
DevilDevil © (2013-04-24 16:56) [221]Удалено модератором
← →
Аббат Пиккола (2013-04-24 16:56) [222]Удалено модератором
← →
Компромисс1 © (2013-04-24 16:57) [223]Удалено модератором
← →
euru © (2013-04-24 17:00) [224]
> _oxffff (24.04.13 16:15) [208]
> Я просто поставил задачу внести реализацию в namespace классаunit Unit1;
interface
type
ISingleton = interface
end;
type
TSingleton = class(ISingleton)
private
class var Instance: TSingleton;
constructor Create;
public
class function GetInstance: ISingleton;
end;
implementation
class function TSingleton.GetInstance: ISingleton;
begin
if TSingleton.Instance = nil then
TSingleton.Instance = TSingleton.Create;
Result := TSingleton.Instance;
end;
finalization
if TSingleton.Instance <> nil then
TSingleton.Instance.Free;
end.
> Что касаемо Вашего кода, то время жизни объекта тоже вызывает вопросы. ;)
А что не так со временем жизни объекта?
← →
Компромисс1 © (2013-04-24 17:00) [225]Удалено модератором
← →
DevilDevil © (2013-04-24 17:00) [226]Удалено модератором
← →
Аббат Пиккола (2013-04-24 17:04) [227]2 DevilDevil © (24.04.13 16:56) [221]
Я сам не вижу в своей работе проблем с глобальными переменными. Так как мое ремесло - приложения. Но это не означает, что на уровне богословия вокруг архитектур таких проблем не существует. Они существуют, к сожалению.
Возможно, если бы я производил библиотеки, я бы осторожнее обращался с этими вещами. Вот, например, глобальная функция Printer. Подозреваю, что это как раз и есть синглетон:function Printer: TPrinter;
begin
if FPrinter = nil then FPrinter := TPrinter.Create;
Result := FPrinter;
end;
function SetPrinter(NewPrinter: TPrinter): TPrinter;
begin
Result := FPrinter;
FPrinter := NewPrinter;
end;
Кстати, а почему бы не решить проблему данной ветки таким вот испытанным способом?
Мне самому не нравятся не только глобальные переменные, но и даже всякие синглетоны. Но раз уж без них никак, то почему бы не сделать так, как сделано в модуле Printers ?
← →
Компромисс1 © (2013-04-24 17:06) [228]Удалено модератором
← →
Аббат Пиккола (2013-04-24 17:08) [229]В модуле Printers VCL есть синглетон Printer и функция
function SetPrinter(NewPrinter: TPrinter): TPrinter,
позволяющая заменить класс внутренней переменной FPrinter на любой TFoo2, если он наследует классу TPrinter.
Это не то, что надо?
← →
Inovet © (2013-04-24 17:08) [230]Удалено модератором
← →
DevilDevil © (2013-04-24 17:11) [231]Удалено модератором
← →
DevilDevil © (2013-04-24 17:13) [232]Удалено модератором
← →
Компромисс1 © (2013-04-24 17:15) [233]Удалено модератором
← →
Аббат Пиккола (2013-04-24 17:25) [234]Удалено модератором
← →
DevilDevil © (2013-04-24 17:25) [235]Удалено модератором
← →
Ega23 © (2013-04-24 17:37) [236]Удалено модератором
← →
Аббат Пиккола (2013-04-24 17:38) [237]Удалено модератором
← →
Inovet © (2013-04-24 17:38) [238]Удалено модератором
← →
Аббат Пиккола (2013-04-24 17:56) [239]Удалено модератором
← →
Ega23 © (2013-04-24 17:57) [240]Удалено модератором
Страницы: 1 2 3 4 5 6 7 вся ветка
Форум: "Прочее";
Текущий архив: 2013.10.06;
Скачать: [xml.tar.bz2];
Память: 1.05 MB
Время: 0.034 c