Není třeba vytvářet instanci třídy a dokonce se to považuje za nežádoucí
Nemusí se od ní dědit
Výhody
Dobrá testovatelnost
Zvýšení přehlednosti (metody se sdružují na jednom jasně určeném místě)
Je dostupná celému systému
Může snižovat počet duplicit podobného kódu (Pokud je dostatečně obecná)
Nevýhody
Jde proti základní myšlence objektového programování (umisťování dat a funkcí s nimi souvisejících blízko sebe.)
Postup
Vytipovat související statické metody, které by mohly být užitečné i jiným částem systému (např. IsNumber, IsText)
Vytipované metody přesunout do nově vytvořené knihovní třídy
Zamezit možnosti vytvořit instanci knihovní třídy (např. jediný privátní konstruktor)
Zamezit možnosti vytvořit potomka knihovní třídy (např. klíčové slovo final)
Původní volání přesunutých metod nahradit voláním metod v knihovně
Singleton
Má jenom jednu globálně sdílenou instanci třídy (A nesmí být možné vytvořit další)
Používá se např. u databází (je třeba jenom jedno připojení/instance)
Základní implementace
má 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.
Příklady
public class Singleton { private static final Singleton instance = new Singleton(); // Instance se vytvoří ihned po inicializaci třídy private Singleton(){} // Konstruktor je privátní, aby nebylo možné vytvářet instance z jiných tříd public static Singleton getInstance(){ return instance; }}
public class Singleton { private static Singleton instance; private Singleton(){} // Konstruktor je privátní, aby nebylo možné vytvářet instance z jiných tříd public static Singleton getInstance(){ if(instance == null) instance = new Singleton(); // Instance se vytvoří až při zavolání funkce - getInstance() return instance; }}
Tovární metoda
Je to funkce, která vrací instanci své vlastní třídy
její účel je vytvořit novou instanci nějakého objektu a vytvořenou instanci vrátit
Druh objektu i jeho počáteční vlastnosti jsou dané přijatými parametry, případně i stavem objektu, který tovární metodu poskytuje.
Instanční tovární metoda
používá se tam, kde je vytvářený objekt nějakým způsobem odvozený od aktuální instance třídy
používá se hlavně u konstantních tříd
Příklad
public class Rectangle { private final int a; private final int b; public Rectangle(int a, int b) { this.a = a; this.b = b; } // první dvě tovární metody vytváří novou instanci se změnou jednoho rozměru public Rectangle setA(int newA) { return new Rectangle(newA, this.b); } public Rectangle setB(int newB) { return new Rectangle(this.a, newB); } // další tovární metoda vytváří obdélník s násobenými rozměry public Rectangle grow(int factor) { return new Rectangle(this.a * factor, this.b * factor); }}
Statická tovární metoda
Všechny informace nutné pro vytvoření objektu dostane jako parametry.
ze statických továrních metod lze vytvořit tovární třídu
Tovární třída
obsahuje zpravidla spolu související statické tovární metody
Příklad
public static Rectangle createRectangle(int a, int b) { return new Rectangle(a, b);}public static Rectangle createSquare(int a) { return new Rectangle(a, a);}
Enum (Výčtový typ)
datový typ tvořený konečnou omezenou množinou pojmenovaných hodnot.
Každý člen výčtového typu je tvořen identifikátorem a konstantou
je určený pro omezenou neměnnou sadu nazývaných hodnot (např. dny v týdnu, měsíce)
Výhody
větší přehlednost, čitelnost a srozumitelnost kódu
Zlepší se nejen sebe-dokumentace ale i bezpečnost celého kódu.
Samotné užití výčtového typu se velmi často pojí s konstrukcí switch-case.