Portál AbcLinuxu, 10. listopadu 2025 02:05
Řešení dotazu:
Asi nejčastěji narazíš na Singleton, což je jen objektový obal na globální proměnnou (= zlo, vyhni se tomu).To je zase kec. Singleton je objektový obal na věc, která je globální a unikátní, i kdybys nechtěl. Například program sám: můžeš se stavět na hlavu, ale program bude mít jeden pid, jeden argv, etc.
... která je globální a unikátní ...Jo ... globální proměnná. Prostě jen jiný název pro totéž. Sám to píšeš
Na jednu stranu se tomu nevyhneš úplně a ten jeden tam bude vždy. Ale na druhou, můžeš to postavit tak, že pid, argv a další věci (třeba i ten singleton samotný) si jen posbíráš na začátku a pak vyrobíš instanci třídy Application. Vše jí předáš a ta už pak nemusí singleton ani zahlédnout (ten předaný singleton už pro ni nebude singleton, ale obyčejný parametr).
class Application {
Application(argv) {
// nějaká ta inicializace, zpracování parametrů
}
int execute() {
// tady je aplikace (mimo konstruktor, aby bylo
// možné nastavit další parametry)
}
}
// Zavaděč aplikace
int main (argv) {
Application a = new Application(argv);
return a.execute();
}
Jak vidíš, není tam žádný singleton. Funkce ::main() by ho mohla trošku připomínat, ale je to jen jednoduchý zavaděč, aby jádro mohlo někde začít se spuštěním.
Třída Application také není singleton, neboť není nijak zaručeno, že nemůže existovat více než jedna instance, ani není jak takovou instanci získat.
Application asi není příliš vhodný název, možná by se hodilo spíš něco jako MainWindow, ale to záleží na tom, k čemu Application je.
Také nám nic nebrání spustit více instancí, třeba otevřít více dokumentů najednou nebo provést paralelně několik výpočtů:
int main(arg) {
ThreadPool tp;
foreach (i in arg) {
Application a = new Application(arg[i]);
tp.executeInNewThread(a); // tp zavolá a.execute()
}
return tp.waitForAllThreads();
}
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.