Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1366807381
O'ShinW
2013-04-24 16:43
2013.10.06
Способности человека. Летучая мышь / Смерш


2-1358698446
Pcrepair
2013-01-20 20:14
2013.10.06
контрол имеющий пару строка-число


2-1358417243
Pcrepair
2013-01-17 14:07
2013.10.06
Замена указателей на Локал.Перем при работе функции в потоке


2-1358420049
Burn
2013-01-17 14:54
2013.10.06
try..except


15-1366662603
Юрий
2013-04-23 00:30
2013.10.06
С днем рождения ! 23 апреля 2013 вторник





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