Приспособленец
Flyweight
Тип структурный
Описан в Design Patterns Да

Приспособленец (англ. flyweight, «легковесный (элемент)») — структурный шаблон проектирования, при котором объект, представляющий себя как уникальный экземпляр в разных местах программы, по факту не является таковым.

Цель

править

Оптимизация работы с памятью путём предотвращения создания экземпляров элементов, имеющих общую сущность.

Описание

править

Приспособленец используется для уменьшения затрат при работе с большим количеством мелких объектов. При проектировании приспособленеца необходимо разделить его свойства на внешние и внутренние. Внутренние свойства всегда неизменны, тогда как внешние могут отличаться в зависимости от места и контекста применения и должны быть вынесены за пределы приспособленца.

Приспособленец дополняет шаблон фабрика таким образом, что при обращении клиента к фабрике для создания нового объекта ищет уже созданный объект с такими же параметрами, что и у требуемого, и возвращает его клиенту. Если такого объекта нет, то фабрика создаст новый.

Примеры

править

Пример на Python

править

Пример на Python (с переопределением конструктора)

править

Пример № 1 на Java

править

Пример № 2 на Java

править

Пример на C#

править

Пример на C++

править

Пример на PHP5

править

Пример на VB.NET

править

Пример на Ruby

править

Символы на Smalltalk

править

Символы в Smalltalk практически идентичны «обычным строкам», но не порождаются каждый раз заново. Два идентичных символа на самом деле всегда являются одним и тем же экземпляром класса Symbol, тогда как две идентичные строки могут быть разными экземплярами класса String.

Ссылки

править

📚 Artikel Terkait di Wikipedia

Discord

предложенных вариантов и его масштаб. В декабре 2016 года компания представила GameBridge API, который позволяет разработчикам игр интегрировать Discord непосредственно

Шаблонный метод (шаблон проектирования)

game = new Monopoly(); game.PlayOneGame(2); } } } Исходный текст на языке Python from abc import ABCMeta, abstractmethod class Unit(metaclass=ABCMeta): """

Одиночка (шаблон проектирования)

0318 Архивная копия от 3 июня 2020 на Wayback Machine: Пример на языке Python на декораторах def singleton(cls): instances = {} def getinstance(): if

Итератор (шаблон проектирования)

$client->printOperation2(); } } Test::go(); } Исходный текст на языке Python from abc import ABCMeta, abstractmethod class Iterator(metaclass=ABCMeta):

Tor

сканирования сети для их поиска. Тогда разработчики Tor внедрили технологию Bridge Guard➤, защищающую мостовые узлы➤ от зондирования. С 9 февраля 2012 года

Интерпретатор (шаблон проектирования)

Interpret(Context context) { context.Result.Push(Value); } } } Исходный текст на языке Python __doc__ = ''' Система для вычисления и манипулирования булевыми выражениями

Посредник (шаблон проектирования)

'How are you?' Colleague1 gets message 'Fine, thanks' Исходный текст на Python from abc import ABCMeta, abstractmethod from weakref import proxy import

Декоратор (шаблон проектирования)

проектирования. В Python существуют декораторы функций и классов, концепция которых отличается от концепции шаблона проектирования. Пример на языке Python """ Demonstrated