Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемВладлена Шмыгина
1 Программная инженерия Андрей Дмитриев ©
2 Шаблоны проектирования
3 Одиночка (Singleton) Это реализация класса, экземпляров которого не может быть больше одного. Часто используется для организации доступа к одному и тому же набору данных из нескольких других классов.
4 Одиночка (попытка 1) public class Singleton { public final static Singleton instance = new Singleton(); public static void main(String [] s) { Singleton st = new Singleton(); if (st == Singleton.instance){ System.out.println("equality"); } else { System.out.println("inequality"};
5 Одиночка (попытка 2) private Singleton(){} //определим конструктор, таким образом, удалив конструктор по умолчанию(public) public static void main(String [] s) { Singleton st = new Singleton(); if (st == Singleton.instance){ System.out.println("equality"); } else { System.out.println("inequality"); }
6 Одиночка (попытка 3) public class RunSingleton { public static void main(String [] s) { Singleton st = new Singleton(); //ошибка if (st == Singleton.instance){ System.out.println("equality"); } else { System.out.println("inequality"); }
7 Одиночка (реализация) public class PrintSpooler { private static PrintSpooler spooler; private PrintSpooler() { //прячем конструктор} public static synchronized PrintSpooler getSpooler(){ if (spooler == null) //инициализируем экземпляр если это первый вызов spooler = new PrintSpooler(); return spooler; // возвращаем статический экземпляр } public void print(String s){ System.out.println(s); } }
8 Одиночка (не перекрытый конструктор) public Spooler() throws SingletonException{ //Контроль с открытым конструктором if(instance_flag) throw new SingletonException(…); else instance_flag = true; //устанавливаем контролирующий флаг System.out.println("printer opened"); }
9 Одиночка (выводы) Легко расширить класс до возможности существования более одного экземпляра. Реализация наследование от класса-одиночки требует глубокого анализа. PrintSpooler pr3 = new PrintSpooler(); //ошибка компиляции
10 Q&A
11 Спасибо! Андрей Дмитриев ©
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.