Синглтон режим
Иногда мотивация имеет только один экземпляр класса. Например, система должна иметь только один экземпляр управления окнами.
Singleton Pattern - самый простой шаблон проектирования: класс отвечает за создание самостоятельной работы, гарантируя, что существует только один экземпляр, и предоставление записи для доступа к этому экземпляру.
Цель
1. Убедитесь, что создается только один экземпляр.
2. Предоставьте запись для доступа к этому экземпляру.
Используйте окончательный, чтобы убедиться, что он создается один раз, и частный конструктор гарантирует, что он не создается. Метод общественности GetInstance гарантирует, что внешний доступный доступ. Ниже приведен голодный режим:
Public Class Singleton {Private Static Final Singleton Extance = new Singleton (); private singleton () {} public static singleton getInstance () {return ancess; }}
Ленивый режим:
открытый класс singletondemo {private static volatile singletondemo ancess = null; private singletondemo () {} public static singletondemo getInstance () {if (ancess == null) {synchronized (singletondemo .class) {if (ancess == null) {exante = new singletondemo (); }} return Encement; }}
Применимые сценарии и примеры
1. Класс логгера предотвращает создание экземпляра регистрации каждый раз, когда печатается журнал.
2. Класс управления, как правило, есть только один экземпляр управления во всей системе.
Конкретные проблемы и реализации
1. Режим потока, надежный синглтонский режим должен быть защищенно.
2. Lazy Mode использует механизм двойной блокировки.
3. Режим Eagle использует статические переменные и создается экземпляром при загрузке программы, гарантируя, что есть только один экземпляр.
4. Абстрактные фабрики и заводские методы обычно разработаны в виде синглтонских шаблонов, чтобы гарантировать, что есть только одна фабрика.
5. При использовании сериализации и десериализации будут созданы несколько экземпляров. Используйте функцию ReadResolve, чтобы избежать этого, но лучше не использовать сериализацию.
Общедоступный класс Singleton реализует Serializable {... // Этот метод называется сразу после того, как объект этого класса детериализуется. // Этот метод возвращает экземпляр Синглтона. защищенный объект readresolve () {return getInstance (); }}
Ключевые моменты
1. В многопоточных программах обратите внимание на синхронизацию данных.
2. При сериализации используйте метод ReadResolve, чтобы вернуть экземпляр, чтобы избежать создания нескольких объектов.
3. Если загружено несколькими погрузчиками класса, будут созданы несколько экземпляров.
Простой фабричный режим
Простая заводская модель мотивации - это базис и предварительная реализация абстрактных фабричных и фабричных методов.
Цель
1. Не раскрывайте детали создания объектного экземпляра клиенту.
2. Создайте объект через общий интерфейс.
выполнить
Реализация очень проста:
1. Когда клиент нуждается в продукте, он не использует новое для его создания, но предоставляет описание продукта для завода, что позволяет заводу предоставлять новый продукт.
2. Завод создает продукт для клиента.
3. Клиент использует абстрактный продукт, не заботясь о конкретной реализации продукта.
Пример
1. Программа рисования для рисования форм. Форма - это интерфейс продукта, а треугольники - бетонный продукт. Мы можем создать фабрику, а затем создать продукт в соответствии с описанием клиента. Однако при добавлении новых форм нам нужно изменить заводский класс.
Конкретные проблемы и реализации
1. При добавлении новых продуктов завод должен быть изменен.
открытый класс productfactory {public product createProduct (String productId) {if (id == id1) возвращать новый oneproduct (); if (id == id2) вернуть новый другой продукт (); ... // так далее для других идентификаторов вернуть null; // Если идентификатор не имеет никаких ожидаемых значений} ...}Как правило, мы используем заявление IF, чтобы судить о описании продукта и создавать различные продукты. Когда есть новые продукты, нам нужно добавить новые суждения. Эта проблема может быть решена с помощью абстрактных заводов.
Суммировать
1. Используйте его только тогда, когда вам действительно нужен заводский режим, иначе он просто увеличит сложность программы. Например, когда несколько объектов имеют аналогичные основные типы, вы можете рассмотреть возможность использования простого заводского режима для равномерного создания объектов.
2. Простые фабрики имеют больше заявлений о суждениях, которые нарушают принцип открытия и закрытия модификаций. Следовательно, целесообразно использовать простой заводский режим для некоторых фиксированных и простых программ и использовать абстрактный режим заводского или метода заводского метода для некоторых сложных и часто расширяемых программ.