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

Шаблон представляет собой механизм, который позволяет избежать создания большого количества объектов. Чтобы понять, является ли какая-то часть вашего приложения кандидатом для использования шаблона, рассмотрим возможно ли удалить некоторые данные из класса и сделать их внешними. Если возможно уменьшить огромное количество различных классов, которые вынуждена обслуживать ваша программа, это может послужить поводом к использованию шаблона.
Типичным примером может книги с папками. Папка с именем каждого работника компании на ней. Нам понадобятся атрибуты "Selected", "Not Selected", "employeeName". С таким подходом, нам потребовалось бы создать около 2000 классов папок для каждого работника. Это может быть дорогостоящей операцией, поэтому мы можем создать лишь два класса с атрибутами "выбранная" и "не выбранная" и установить имя рабочего в методе:
Таким образом, объекты класса папки будут в общем доступе и вам не понадобится создавать множество объектов для каждого работника.
Я долго думал о том, какой же привести пример из жизни по этому шаблону. Тогда я вспомнил разговор с одним из моих двоюродных братьев, который работал в компании, производящей шлифовальные колеса. Я химический инженер и должен помнить названия химических соединений. Он рассказал мне, что колеса используются для резки металла. Изначально, главные ингредиенты для этих колес Оксид алюминия и карбид кремния. Эти соединения используются в форме зерна.
Его компания производит около 25000 типов шлифовальных колес. Существует два типа связей между материалами, используемыми для связки оксида алюминия и карбида кремния. Одна - это стеклянная связь. Это когда колесо нагревается до 1300 градусов по цельсию и кремний заливается в стекло для удержания двух материалов вместе. Второй метод - заливка смолой, это когда небольшое количество смолы может помочь удержать материалы вместе.
Если посмотреть на это с точки зрения программного обеспечения, мы можем увидеть, что каждое колесо имеет различный тип и поэтому нам необходимо сделать 25000 классов для того, чтобы позаботиться о них. Это, безусловно, потребует огромного количества ресурсов. Так как же избежать этого?
Мы уже знаем немного и можем выделить общие шаблоны для каждого колеса. Это:
- Используемые материалы - Они всегда из оксида алюминия и карбида кремния.
- Каждое колесо имеет связь.
- Каждое колесо имеет размер.
Рассмотрим код. Для каждого flyweight существует фабрика, которая обеспечивает объект. Теперь, когда колеса делаются на фабрике, у нас будет класс GrindingWheelFactory, который возвращает тип колеса, который нам нужен.
GrindingWheelFactory.java:
Этот класс очень важный. Давайте посмотрим поближе а этот класс. Он возвращает колесо, базирующееся только на связях. Как мы знаем, связи могут быть только двух типов, поэтому в любой момент времени будет только два объекта, что является очень незначительным в сравнении с 25000.
Другой важный класс здесь, конечно, GrindingWheel. Он конструируется в зависимости от того, какие параметры были переданы в класс getWheel() класса GrindingWheelFactory. Посмотрим на класс GrindingWheel.
GrindingWheel.java:







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