Шаблон "Приспособленец" (Flyweight)

max аватар
126

Шаблон представляет собой механизм, который позволяет избежать создания большого количества объектов. Чтобы понять, является ли какая-то часть вашего приложения кандидатом для использования шаблона, рассмотрим возможно ли удалить некоторые данные из класса и сделать их внешними. Если возможно уменьшить огромное количество различных классов, которые вынуждена обслуживать ваша программа,  это может послужить поводом к использованию шаблона.

Типичным примером может книги  с папками. Папка с именем каждого работника компании на ней. Нам понадобятся атрибуты "Selected", "Not Selected", "employeeName".  С таким подходом, нам потребовалось бы создать около 2000 классов папок для каждого работника. Это может быть дорогостоящей операцией, поэтому мы можем создать лишь два класса с атрибутами "выбранная" и "не выбранная" и установить имя рабочего в методе:

Таким образом, объекты класса папки будут в общем доступе и вам не понадобится  создавать множество объектов для каждого работника.

Я долго думал о том, какой же привести пример из жизни по этому шаблону. Тогда я вспомнил разговор с одним из моих двоюродных братьев, который работал в компании, производящей шлифовальные колеса. Я химический инженер и должен помнить названия химических соединений.  Он рассказал мне, что колеса используются для резки металла. Изначально, главные ингредиенты для этих колес Оксид алюминия и карбид кремния. Эти соединения используются в форме зерна. 

Его компания производит около 25000 типов шлифовальных колес.  Существует два типа связей между материалами, используемыми для связки оксида алюминия и карбида кремния.  Одна - это стеклянная связь. Это когда колесо нагревается до 1300 градусов по цельсию и кремний заливается в стекло для удержания двух материалов вместе. Второй метод - заливка смолой, это когда небольшое количество смолы может помочь удержать материалы вместе.  

 

Если посмотреть на это с точки зрения программного обеспечения, мы можем увидеть, что каждое колесо имеет различный тип и поэтому нам необходимо сделать 25000 классов для того, чтобы позаботиться о них. Это, безусловно, потребует огромного количества ресурсов.  Так как же избежать этого?

 

Мы уже знаем немного и можем выделить общие шаблоны для каждого колеса. Это:

 

  1. Используемые материалы - Они всегда из оксида алюминия и карбида кремния.
  2. Каждое  колесо имеет связь.
  3. Каждое колесо имеет размер.

 

Рассмотрим код. Для каждого flyweight существует фабрика, которая обеспечивает объект. Теперь, когда колеса делаются на фабрике, у нас будет класс GrindingWheelFactory, который возвращает тип колеса, который нам нужен.

GrindingWheelFactory.java:

Этот класс очень важный. Давайте посмотрим поближе а этот класс. Он возвращает колесо, базирующееся только на связях.  Как мы знаем, связи могут быть только двух типов, поэтому в любой момент времени будет только два объекта, что является очень незначительным в сравнении с 25000.

 

Другой важный класс здесь, конечно, GrindingWheel.  Он конструируется в зависимости от того, какие параметры были переданы в класс getWheel() класса GrindingWheelFactory. Посмотрим на класс GrindingWheel.

GrindingWheel.java:

 

 


Конец
Бертран Рассел более, чем уверен в том, что нет ничего более утомительного, и ничего более бесполезного, чем нерешительность.

Дизайн сайта симпатичный, информация, приведенная выше как всегда хуйня, простите за выражение, уже в сотый раз убеждаюсь, что тут делать нечего. Учите Джаву!

max аватар

За дизайн спасибо. Кому-то хуйня, кому-то может стать полезной информация, приведенная выше. Делать нечего - не делайте. Джаву буду учить ( Может поделитесь ресурсами из своего богатого опыта ;) ?

Отправить комментарий

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке