Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Factory Method

Читайте также:
  1. Abstract Factory
  2. Acceptance. Methods of acceptance
  3. Attitude, Methodology & Technology.
  4. Basic Types of Factory Layout
  5. Benefits of Knowing Research and Research Methods
  6. Blue. Factory» произвела позитивное впечатление на жюри
  7. Boiling-point method for calibrating a thermometer

Определяет стандартный метод создания объекта, не связанный с вызовом конструктора, оставляя решение о том, какой именно объект создавать за подклассами.

 

При этом классу, который будет вызывать статический метод ProductFactory.createProduct() нет необходимости знать какой конкретно экземпляр будет возвращён, он будет работать только с интерфейсом:

 

Product product = ProductFactory.createProduct();

 

//do something with the product

 

Реализация метода createProduct() может создавать тот или иной подкласс интерфейса Product, в зависимости от конфигурации, например:

public static Product createProduct() throws Exception{

return Class.forName(System.getProperty(“productclass”)).newInstance();

}

После чего можно запускать JVM:

java –Dproductclass=mypackage.ProductB my.MainClass

 

Таким образом можно избежать зависимости кода от конкретных реализаций того или иного класса. Однако для того чтобы этого добыться надо следить, чтобы классы которые могут быть подменены таким образом реализовывали один и тот же абстрактный интерфейс. По такому принципу сделан DriverManager.getConnection() в JDBC API.

Singleton

Обеспечивает наличие в системе только одного экземпляра заданного класса, позволяя другим классам получать доступ к этому экземпляру.

 

 

В данном случае метод getInstance() является статическим (static), и для его вызова можно обращаться напрямую к классу, без создания его экземпляра:

Singleton my = Singleton.getInstance();

Переменная в которой содержиться единственный экземпляр этого класса является также статической и закрытой. Конструктор у такого класса так же закрытый, чтобы трибуты классы не могли создавать экземпляры этого класса. Экземпляр создаётся только один раз при инициализации класса class loader’ом.

 

Public class Singleton{

private static Singleton instance = new Singleton();

private Singleton(){}

private static Singleton getInstance(){return instance;}

}

 

Объекты типа singleton применяются для организации различного рода общедоступной информации – своего рода глобальные справочники. Нарпимер можно сделать некий справочник, где хранить разного рода конфигурационную информацию, доступную всем частям программы. Примером является java.lang.System.getProperties() – который возвращает глобальные свойства для всего процесса виртуальной машины.

 

Важно отметить, что при показанной реализации (через использование статических полей), создаётся один эеземпляр на один загрузчик классов!, если у вас несколько независымых загрузчиков классов, как например, в случае с несколькими web приложениями задеплоенными под разными web context’ами, будет создано по одному экземпляру для КАЖДОГО контекста. Если необходим строго один эземпляр в такой конфигурации, то следует использовать, например, JNDI контексты, поддерживаемые серверами приложений, которые позволяют гарантировать один эеземпляр не только для одного приложения но и для распределённого (например кластеризованного) приложения.


Дата добавления: 2015-10-24; просмотров: 120 | Нарушение авторских прав


Читайте в этой же книге: Введение в UML. Краткая историческая справка. Диаграммы классов, диаграммы последовательностей. | Лекция 2. Основные определения ООП. | Мобильные агенты (Applets and other mobile code) | Введение в Web-приложения и сервлеты | Template Method | Структурные шаблоны | Аспектно-Ориентированное Программирование (Aspect Oriented Programming, AOP) | Подходы к межсистемной интеграции | Интеграция с помощью разделяемой базы данных | Каналы и Фильтры |
<== предыдущая страница | следующая страница ==>
Гранулярность (granularity)| Abstract Factory

mybiblioteka.su - 2015-2024 год. (0.006 сек.)