Singleton: Porovnání verzí
Smazaný obsah Přidaný obsah
m r2.6.4) (robot změnil: tr:Tekil kalıp |
Překopání články, grafické úpravy |
||
Řádek 1:
'''Singleton''' (česky ''jedináček'' nebo také ''unikát'') je název pro
| autor = Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides
| odkaz na autora =
| titul = Design Patterns: Elements of Reusable Object-Oriented Software
| vydavatel = Addison-Wesley Professional
| místo =
| rok = 1995
| isbn = 0-201-63361-2
| kapitola =
| strany =
| poznámka =
| jazyk = anglicky
}}</ref>. Singleton je také často využíván jako součást jiných návrhových vzorů jako jsou například [[Flyweight]] nebo [[Facade]].
==Účel==
Nutnost existence jediné instance se objevuje například tam, kde
==Základní implementace==
Implementace jedináčka mají společný soukromý konstruktor, který zaručí, že nedojde k vytvoření další instance. „Požadovaná instance se vytvoří uvnitř třídy a její odkaz se uloží do statického atributu. Jednotlivé varianty implementace se pak odlišují tím, kdy a jak se objekt konstruuje a jak jej mohou ti ostatní získat“<ref name="reftwo">{{Citace monografie
| autor = Rudolf Pecinovský
| odkaz na autora =
| titul = Návrhové vzory
| vydavatel = Computer Press
| místo =
| rok = 2007
| isbn = 978-80-251-1582-4
| kapitola =
| strany =
| poznámka =
| jazyk = česky
}}</ref>.
=== Implementace v jazyce [[Java]] ===
<source lang=java>
public class Singleton {
private static Singleton instance;
//Vytvorime soukromy konstruktor
private Singleton() { }
//Metoda pro vytvoreni objektu jedinacek
public static Singleton getInstance() {
//Jeli je promenna instance null, tak se vytvori objekt
if (instance == null) {
instance = new Singleton();
}
//Vratime jedinacka
return instance;
}
public void pozdrav() {
System.out.print("Ahoj ja jsem jedinacek.");
}
//Pouziti
public static void main(String[] args) {
Singleton objekt = Singleton.getInstance();
}
}
</source>
Ukázka kódu z ''Java - návrhový vzor Singleton''<ref>{{Citace elektronické monografie
| příjmení = Hrebenar
| jméno = Jiří
| odkaz na autora =
| titul =
| url = http://programovani.blog.zive.cz/2009/08/java-navrhovy-vzor-singleton/
| datum vydání = 28. 8. 2009
| datum aktualizace =
| datum přístupu =
| vydavatel =
| místo =
| jazyk = český
}}</ref>
=== Implementace v jazyce [[Python]] ===
<source lang=python>
## Singleton class
#
Řádek 114 ⟶ 146:
</source>
Ukázka kódu z How to make singleton in Python <ref>[http://wiki.forum.nokia.com/index.php/How_to_make_a_singleton_in_Python How to make a singleton in Python], 29. 11. 2009
=== Implementace v jazyce [[Csharp|C#]] ===
<source lang=csharp>
class Singleton {
private static Singleton instance;
//Privatni konstruktor
private Singleton() { }
//Staticka property (vlastnost) zajistujici vytvoreni instance
public static Singleton Instance {
get {
//Jeli je promenna instance null, tak se vytvori objekt
if (instance == null) {
instance = new Singleton();
}
/
return instance;
}
Řádek 152 ⟶ 171:
class Program {
/
public static void Main() {
Singleton s = Singleton.Instance;
Řádek 161 ⟶ 178:
</source>
=== Implementace v jazyce [[C++]] ===
<source lang=cpp>
private:
static Singleton *instance;
public:
static Singleton *
if (instance == NULL) {
instance = new Singleton();
}
return instance;
}
}
</source>
==Nevýhody==
Při využívání [[Vlákno (program)|vícevláknových]] aplikací se může stát, že první vlákno požádá o vytvoření jedináčka. [[Procesor]] přepne na druhé vlákno, kde ještě není jedináček vytvořen a je spuštěn proces tvorby jedináčka. Poté je přepnuto na první vlákno, kde byl jedináček započat a je dokončen. Bohužel už není jedináček, ale je to dvojče. Tomu by se dalo vyhnout [[Synchronizace|synchronizováním]] tovární [[metoda|metody]], což je ale poměrně drahá operace
Další problém nastává u [[Serializace|serializovatelnosti]] jedináčka. Kdybychom chtěli načítat jedináčka uloženého ze [[stream]]u, například souboru, musíme zkontrolovat, jestli již nějaký takový jedináček neexistuje (Java poskytuje metodu, kterou je tato funkcionalita podpořena, jedná se o readSolve(), tato metoda vrací odkaz na aktuálního (původního) jedináčka, ale umožňuje ho například doplnit o novinky jedináčka ze streamu).
==Reference==
<references/>
==Související články==
* [[Objektově orientované programování]]
==Externí odkazy==
* {{cs}} [http://objekty.vse.cz/Objekty/Vzory-Singleton Návrhový vzor singleton]
* {{cs}} [http://interval.cz/clanky/pouzivame-navrhove-vzory-v-net-singleton/ Používáme návrhové vzory v .NET – Singleton]
* {{cs}} [http://phpfashion.com/je-singleton-zlo Je singleton zlo?]
* {{cs}} [http://www.misantrop.info/716382-je-singleton-mrtvy-ale-kdepak.php Je singleton mrtvý? Ale kdepak]
* {{en}} [http://msdn.microsoft.com/en-us/library/ms998558.aspx Vícevláknový singleton na msdn.com]
* {{en}} [http://giorgiosironi.blogspot.com/2009/11/how-to-eliminate-singletons.html Jak eliminovat singletony]
* {{en}} [http://www.garyrobinson.net/singletonmixin.py Soubor s thread-safe singletonem v jazyce Python]
* {{en}} [http://www.python.org/workshops/1997-10/proceedings/savikko.html Vespe Savikko: Design Patterns in Python ]
* {{en}} [http://c2.com/cgi/wiki?PythonSingleton
[[Kategorie:Návrhové vzory]]
|