В този урок ще научим за модела за проектиране на единичен модел и как да го приложим в Java с помощта на примери.
Singleton е по-скоро модел на дизайн, отколкото функция, специфична за Java. Той гарантира, че е създаден само един екземпляр на клас.
Шаблонът на дизайна е като нашата библиотека с кодове, която включва различни техники за кодиране, споделяни от програмистите по целия свят.
Java Singleton
Ето как можем да използваме единични файлове в Java.
- създайте
private
конструктор, който ограничава създаването на обект извън класа - създайте
private
атрибут, който се отнася до единичния обект. - създайте
public static
метод, който ни позволява да създадем и да осъществим достъп до обекта, който сме създали. Вътре в метода ще създадем условие, което ни ограничава да създаваме повече от един обект.
Ето един пример.
class SingletonExample ( // private field that refers to the object private static SingletonExample singleObject; private SingletonExample() ( // constructor of the SingletonExample class ) public static SingletonExample getInstance() ( // write code that allows us to create only one object // access the object as per our need ) )
В горния пример,
private static SingletonExample singleObject
- препратка към обекта на класа.private SingletonExample()
- частен конструктор, който ограничава създаването на обекти извън класа.public static SingletonExample getInstance()
- този метод връща препратката към единствения обект от класа. Тъй като методът е статичен, той може да бъде достъпен с името на класа.
Използване на клас Singleton
По време на работа с бази данни могат да се използват единични тонове. Те могат да се използват за създаване на пул от връзки за достъп до базата данни, като същевременно се използва една и съща връзка за всички клиенти. Например,
class Database ( private static Database dbObject; private Database() ( ) public static Database getInstance() ( // create object if it's not already created if(dbObject == null) ( dbObject = new Database(); ) // returns the singleton object return dbObject; ) public void getConnection() ( System.out.println("You are now connected to the database."); ) ) class Main ( public static void main(String() args) ( Database db1; // refers to the only object of Database db1= Database.getInstance(); db1.getConnection(); ) )
Когато стартираме програмата, изходът ще бъде:
Вече сте свързани с базата данни.
В горния ни пример,
- Създадохме база данни за един клас.
- DbObject е поле от тип клас. Това ще се отнася за обекта на базата данни на класа.
- Частният конструктор
Database()
предотвратява създаването на обекти извън класа. - Методът на типа статичен клас
getInstance()
връща екземпляра на класа към външния свят. - В основния клас имаме променлива тип db1. Обаждаме се
getInstance()
с помощта на db1, за да получим единствения обект на базата данни. - Методът
getConnection()
може да бъде достъпен само с помощта на обекта на базата данни. - Тъй като Базата данни може да има само един обект, всички клиенти имат достъп до базата данни чрез една връзка.
Важно е да се отбележи, че има само няколко сценария (като регистриране), при които единичните точки имат смисъл. Дори връзката с база данни обикновено не трябва да бъде единична.
Препоръчваме ви да избягвате напълно използването на единични символи, ако не сте сигурни дали да го използвате или не. Научете повече: Какво е толкова лошото в Сингълтън?