Java/Singleton
< Java
K programování v Javě jistě patří programová konstrukce singleton. Ukážeme si jeho klasickou verzi, jednoduché logování do souboru.
Příklad
editovatDeklarujeme třídu Singleton:
package wikibooks.singletons;
import java.io.File;
import java.io.FileWriter;
/** Trida Singleton provadi logování do souboru. */
public class Singleton {
private static Singleton single;
private static String fileName = "./log.txt"; //log je v aktualnim adresari aplikace
private FileWriter fw;
/** Soukromy konstruktor pro jedinou instanci */
private Singleton() {
try {
File file = new File(fileName);
File dir = file.getParentFile();
if(!dir.exists()) { dir.mkdirs(); } // zajisti existenci adresare pro log-soubor
if(file.exists()) { file.delete(); } // zajisti neexistenci predchoziho log-souboru
if(file.createNewFile()) { /* vytvori novy soubor */ }
// vytvori instanci tridy a vytvorit filewriter pro zapisy na konec souboru (append)
fw = new FileWriter(file.getAbsoluteFile(), true);
}
catch(java.io.IOException e) { throw new java.lang.UnknownError("Souborova chyba"); }
}
/** Staticky blok inicializuje Singleton */
static { single = new Singleton(); }
/**
Vzdy navraci jednu a tu samou instanci Singletonu, ktera pak provadi operace logovani
@return */
public static Singleton getInstance() { return single; }
/**
provede logovani do souboru, presněji ulozi jeden zaznam;
synchronizovano pro atomicitu-nedelitelnost operace, aby logovani bylo postupne
@param stolog */
public synchronized void log(String stolog) {
try {
fw.write(System.lineSeparator() + stolog); // zapis textu do bufferu
fw.flush(); // zajistit skutecny/fyzicky zapis do souboru (vyprazdnit buffer)
}
catch(java.io.IOException e) { throw new java.lang.UnknownError("Souborova chyba"); }
}
/**
zajisti testovaci volani provadeci metody "log"
* @param args
*/
public static void main(String[] args) {
Singleton.getInstance().log("radek 1");
Singleton.getInstance().log("radek 2");
}
}
Po spuštění se zajistí existence uvedené cesty a souboru log.txt . V něm potom dva řádky s textem:
radek 1
radek 2
Odkazy
editovat- Encyklopedický článek Singleton ve Wikipedii