Помощь в написании студенческих работ
Антистрессовый сервис

Особенности паттерна Flyweight

РефератПомощь в написанииУзнать стоимостьмоей работы

При использовании объектов на очень низких уровнях детализации накладные расходы могут быть непомерно большими. Использование паттерна Flyweight предполагает удаление неразделяемого состояния из класса и его передачу клиентом в вызываемые методы. И хотя это накладывает большую ответственность на клиента, но теперь создается значительно меньшее число объектов-приспособленцев. Совместное… Читать ещё >

Особенности паттерна Flyweight (реферат, курсовая, диплом, контрольная)

  • · Если Flyweight показывает, как сделать множество небольших объектов, то Facade показывает, как представить целую подсистему одним объектом.
  • · Flyweight часто используется совместно с Composite для реализации иерархической структуры в виде графа с разделяемыми листовыми вершинами.
  • · Терминальные символы абстрактного синтаксического дерева Interpreter могут разделяться при помощи Flyweight.
  • · Flyweight объясняет, когда и как могут разделяться объекты State.

Реализация паттерна Flyweight. Паттерн Flyweight: до и после

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

В этом примере, «X» состояние рассматривается как разделяемое, а «Y» состояние выносится наружу (передается клиентом при вызове метода report ()).

До.

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

class Gazillion.

{.

public:

Gazillion ().

{.

m_value_one = s_num / Y;

m_value_two = s_num % Y;

++s_num;

}.

void report ().

{.

cout << m_value_one << m_value_two << ' ';

}.

static int X, Y;

private:

int m_value_one;

int m_value_two;

static int s_num;

};

int Gazillion: X = 6, Gazillion: Y = 10, Gazillion: s_num = 0;

int main ().

{.

Gazillion matrix[Gazillion:X][Gazillion:Y];

for (int i = 0; i < Gazillion: X; ++i).

{.

for (int j = 0; j < Gazillion: Y; ++j).

matrix[i][j]. report ();

cout << ' ';

}.

}.

Вывод программы:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 00 01 02 03 04 05 06 07 08 09
  • 10 11 12 13 14 15 16 17 18 19
  • 20 21 22 23 24 25 26 27 28 29
  • 30 31 32 33 34 35 36 37 38 39
  • 40 41 42 43 44 45 46 47 48 49
  • 50 51 52 53 54 55 56 57 58 59

После.

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

class Gazillion.

{.

public:

Gazillion (int value_one).

{.

m_value_one = value_one;

cout << «ctor: «<< m_value_one << ' ';

}.

~Gazillion ().

{.

cout << m_value_one << ' ';

}.

void report (int value_two).

{.

cout << m_value_one << value_two << ' ';

}.

private:

int m_value_one;

};

class Factory.

{.

public:

static Gazillion *get_fly (int in).

{.

if (!s_pool[in]).

s_pool[in] = new Gazillion (in);

return s_pool[in];

}.

static void clean_up ().

{.

cout << «dtors: «;

for (int i = 0; i < X; ++i).

if (s_pool[i]).

delete s_pool[i];

cout << ' ';

}.

static int X, Y;

private:

static Gazillion *s_pool[];

};

int Factory: X = 6, Factory: Y = 10;

Gazillion *Factory:s_pool[] =.

{.

0, 0, 0, 0, 0, 0.

};

int main ().

{.

for (int i = 0; i < Factory: X; ++i).

{.

for (int j = 0; j < Factory: Y; ++j).

Factory:get_fly (i)->report (j);

cout << ' ';

}.

Factory:clean_up ();

}.

проектирование паттерн графический Вывод программы:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

ctor: 0.

00 01 02 03 04 05 06 07 08 09.

ctor: 1.

10 11 12 13 14 15 16 17 18 19.

ctor: 2.

20 21 22 23 24 25 26 27 28 29.

ctor: 3.

30 31 32 33 34 35 36 37 38 39.

ctor: 4.

40 41 42 43 44 45 46 47 48 49.

ctor: 5.

50 51 52 53 54 55 56 57 58 59.

dtors: 0 1 2 3 4 5.

Показать весь текст
Заполнить форму текущей работой