Přeskočit na obsah

Java/Singleton

Z Wikiknih

K programování v Javě jistě patří programová konstrukce singleton. Ukážeme si jeho klasickou verzi, jednoduché logování do souboru.

Deklarujeme 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

  • Encyklopedický článek Singleton ve Wikipedii