Дисциплины - Объектно-ориентированное программирование

Шаблоны проектирования практических задач - Структурные шаблоны проектирования - Легковес

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

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

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

Пример на PHP

// "FlyweightFactory"
class CharacterFactory
{
	private $characters = array();
	public function GetCharacter($key)
	{
		// Uses "lazy initialization"
		if (!array_key_exists($key, $this->characters))
		{
			switch ($key)
			{
				case 'A': $this->characters[$key] = new CharacterA(); break;
				case 'B': $this->characters[$key] = new CharacterB(); break;
				//...
				case 'Z': $this->characters[$key] = new CharacterZ(); break;
			}
		}
		return $this->characters[$key];
	}
}

// "Flyweight"
abstract class Character
{
	protected $symbol;
	protected $width;
	protected $height;
	protected $ascent;
	protected $descent;
	protected $pointSize;

	public abstract function Display($pointSize);
}

// "ConcreteFlyweight"

class CharacterA extends Character
{
	// Constructor
	public function __construct()
	{
		$this->symbol = 'A';
		$this->height = 100;
		$this->width = 120;
		$this->ascent = 70;
		$this->descent = 0;
	}

	public function Display($pointSize)
	{
		$this->pointSize = $pointSize;
		print ($this->symbol." (pointsize ".$this->pointSize.")");
	}
}

// "ConcreteFlyweight"

class CharacterB extends Character
{
	// Constructor
	public function __construct()
	{
		$this->symbol = 'B';
		$this->height = 100;
		$this->width = 140;
		$this->ascent = 72;
		$this->descent = 0;
	}

	public function  Display($pointSize)
	{
		$this->pointSize = $pointSize;
		print($this->symbol." (pointsize ".$this->pointSize.")");
	}

}

// ... C, D, E, etc.

// "ConcreteFlyweight"

class CharacterZ extends Character
{
	// Constructor
	public function __construct()
	{
		$this->symbol = 'Z';
		$this->height = 100;
		$this->width = 100;
		$this->ascent = 68;
		$this->descent = 0;
	}

	public function  Display($pointSize)
	{
		$this->pointSize = $pointSize;
		print($this->symbol." (pointsize ".$this->pointSize.")");
	}
}

$document="AAZZBBZB";
// Build a document with text
$chars=str_split($document);
print_r($chars);

$f = new CharacterFactory();

// extrinsic state
$pointSize = 0;

// For each character use a flyweight object
foreach ($chars as $key) {
	$pointSize++;
	$character = $f->GetCharacter($key);
	$character->Display($pointSize);
}

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться
814301 БГУИР
814302 БГУИР
814303 БГУИР
894351 БГУИР
90421 БГУИР


Изображения Видео

1. Абстрактная фабрика https://www.youtube.com/watch?v=1mVONOCxfLg
2. Фабричный метод https://www.youtube.com/watch?v=5UqUDR6_2cY
3. Шаблон декоратор https://www.youtube.com/watch?v=Lwb9bm8yKD0
4. Dessign patterns on PHP https://github.com/domnikl/DesignPatternsPHP
5. Приёмы объектно-ориентированного проектирования. Паттерны проектирования Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес; [пер. с англ.: А. Слинкин науч. ред.: Н. Шалаев]. — Санкт-Петербург [и др.] : Питер, 2014. — 366 с. : ил. ; 24 см.
6. Приемы объектно-ориентированного проектирования. Паттерны проектирования Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес; [пер. с англ.: А. Слинкин науч. ред.: Н. Шалаев]. — Санкт-Петербург [и др.] : Питер, 2014. — 366 с. : ил. ; 24 см.
7. Ajax http://erud.by/ajax
8. Ajax http://erud.by/ajax
9. Ajax http://erud.by/ajax
10. Документация Laravel http://laravel.com
Задание к курсовой работе
Задание к курсовой работе
Вопросы к экзамену