Порождающие шаблоны проектирования



Pdf көрінісі
бет14/15
Дата16.10.2022
өлшемі0,66 Mb.
#43481
1   ...   7   8   9   10   11   12   13   14   15
Байланысты:
Creational Patterns

Достоинства и недостатки 
Достоинства: 
• Для создания новых объектов клиенту необязательно знать их конкретные классы. 
• Возможность гибкого управления процессом создания новых объектов за счет 
возможности динамических добавления и удаления прототипов в реестр. 
Недостатки: 
• Каждый тип создаваемого продукта должен реализовывать операцию клонирования 
clone(). В случае, если требуется глубокое копирование объекта (объект содержит 
ссылки или указатели на другие объекты), это может быть непростой задачей. 
Шаблон «Одиночка» 
Часто в системе могут существовать сущности только в единственном экземпляре, например
система ведения системного журнала сообщений или драйвер дисплея. В таких случаях 
необходимо уметь создавать единственный экземпляр некоторого типа, предоставлять к нему 
доступ извне и запрещать создание нескольких экземпляров того же типа. 
Шаблон «Одиночка» (Singleton) предоставляет такие возможности. 
Для того, чтобы у класса существовал единственный экземпляр, необходимо запретить создавать 
экземпляр класса извне и контролировать единственность внутри кода самого класса. 
Это обеспечивается при помощи следующего решения: 


Рисунок 13 
Диаграмма классов для реализации шаблона «Одиночка» 
Исходный код: 
public class Singleton
{
private static Singleton _instance = null;
private String name = "Noname"; 
private Singleton()
{
}
public static Singleton GetInstance()
{
if (_instance == null)
_instance = new Singleton();
return _instance;
}
public void setName(String name) { 
this.name = name; 
}
public String getName() { 
return this.name; 
}

public class Main 

public static void main(String[] args) { 
var s1 = Singleton.GetInstance(); 
var s2 = Singleton.GetInstance(); 
System.out.println(s1.getName());
System.out.println(s2.getName()); 
s1.setName("Serik"); 
s2.setName("Diana"); 
System.out.println(s1.getName());
System.out.println(s2.getName()); 


В данном примере реализован закрытый конструктор, который не даст создавать экземпляр 
класса извне. 
Создание единственного экземпляра контролируется закрытым статическим полем _instance, 
которое инициализируется при первом обращении к получению экземпляра класса через метод 
GetInstance(), который предоставляет клиентам единственный экземпляр класса. 


Достарыңызбен бөлісу:
1   ...   7   8   9   10   11   12   13   14   15




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет