flyweight

package
v0.0.0-...-6db54d9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 15, 2021 License: MIT Imports: 1 Imported by: 0

README

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

Паттерн Flyweight относится к структурным паттернам уровня объекта.

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

Требуется для реализации:

  1. Класс FlyweightFactory, являющейся модифицированным паттерном фабрики, для создания приспособленцев;
  2. Базовый абстрактный класс Flyweight, для описания общего интерфейса приспособленцев;
  3. Класс ConcreteFlyweight реализующий приспособленца, который будет замещать собой одинаковые мелкие объекты.

Суть в том, что мы можем запрашивать приспособленцев у фабрики по запросу, в свою очередь она будет отдавать те объекты, которые уже были созданы, или создавать новые. Это означает, что мы будем использовать уже созданные объекты, а не создавать ещё больше, если объекты под наши нужны уже имеются. Также стоит обратить внимание, что приспособленцы имеют внутреннее и внешние состояние. Фабрика находит приспособленцев по внутреннему состоянию, а внешнее состояние передается в его методы.

[!] В описании паттерна применяются общие понятия, такие как Класс, Объект, Абстрактный класс. Применимо к языку Go, это Пользовательский Тип, Значение этого Типа и Интерфейс. Также в языке Go за место общепринятого наследования используется агрегирование и встраивание.

-- THE END --

Documentation

Overview

Package flyweight is an example of the Flyweight Pattern.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ConcreteFlyweight

type ConcreteFlyweight struct {
	// contains filtered or unexported fields
}

ConcreteFlyweight implements a Flyweighter interface.

func (*ConcreteFlyweight) Draw

func (f *ConcreteFlyweight) Draw(width, height int, opacity float64) string

Draw draws image. Args width, height and opacity is external state.

type FlyweightFactory

type FlyweightFactory struct {
	// contains filtered or unexported fields
}

FlyweightFactory implements a factory. If a suitable flyweighter is in pool, then returns it.

func (*FlyweightFactory) GetFlyweight

func (f *FlyweightFactory) GetFlyweight(filename string) Flyweighter

GetFlyweight creates or returns a suitable Flyweighter by state.

type Flyweighter

type Flyweighter interface {
	Draw(width, height int, opacity float64) string
}

Flyweighter interface

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL