Лабораторная работа 4 (ПКРПСиБД LAB4 Бочаров И.А.)

Посмотреть архив целиком

Национальный исследовательский институт

Московский Энергетический Институт (Технический Университет)

Институт автоматики и вычислительной техники

Кафедра Прикладной математики





Лабораторная работа №4

по дисциплине:

Проектирование крупных распределенных программных систем и баз данных

тема: «Разработка одного из поведенческих паттернов»

вариант №5 – «Mediator/Посредник»







Выполнил:

Бочаров Иван Андреевич

Проверил:

к.т.н., доц. Куриленко Иван Евгеньевич







Москва

2012 г.

Шаблон проектирования «Посредник»

Категория шаблона

Шаблон проектирования «Посредник» относится к поведенческим шаблонам проектирования.

Описание шаблона

Определяет объект, инкапсулирующий способ взаимодействия множества объектов.

Уместность применения

Шаблон следует применять, если:

  • Имеются объекты, связи между которыми сложны и четко определены

  • Нельзя повторно использовать какой-либо из объектов, поскольку он обменивается информацией со многими другими объектами

  • Необходимо, чтобы поведение, распределенное между несколькими классами, поддавалось настройке без порождения множества подклассов

Преимущества, достигаемые при использовании данного шаблона

Данный шаблон:

  • Снижает число порождаемых подклассов

  • Устраняет связанность между коллегами

  • Упрощает протоколы взаимодействия объектов

  • Абстрагирует способ кооперирования объектов

Недостатки данного шаблона

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

Реализация

Colleague.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace MediatorPattern

{

class Colleague

{

bool isON;


public bool IsON

{

get { return isON; }

set {

mediator.Send(this, value);

this.isON = value;

}

}

string info;


public string Info

{

get { return info; }

set { info = value; }

}


Mediator mediator;


public Colleague(Mediator med) {

this.mediator = med;

this.isON = true;

}

}

}


Mediator.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace MediatorPattern

{

class Mediator

{

Colleague colleague1, colleague2;


internal Colleague Colleague2

{

get { return colleague2; }

set { colleague2 = value; }

}


internal Colleague Colleague1

{

get { return colleague1; }

set { colleague1 = value; }

}


public void Send(Colleague colleague, bool value)

{

Colleague col = colleague == colleague1 ? colleague2 : colleague1;

if (value)

{

col.Info = "My colleague doesn't sleep!";

}

else

{

col.Info = "My colleague is asleep";

}

}


}

}


Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace MediatorPattern

{

class Program

{

static void Main(string[] args)

{

Mediator mediator = new Mediator();

Colleague col1 = new Colleague(mediator);

Colleague col2 = new Colleague(mediator);

mediator.Colleague1 = col1;

mediator.Colleague2 = col2;


col1.IsON = true;

col2.IsON = false;

Console.WriteLine(col1.Info);

Console.WriteLine(col2.Info);

col1.IsON = false;

col2.IsON = true;

Console.WriteLine(col1.Info);

Console.WriteLine(col2.Info);

Console.ReadLine();

}

}

}


UML-диаграмма классов

Диаграмма последовательностей



Литература

  1. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. — СПб: Питер, 2001. — 368 с.: ил. (Серия «Библиотека программиста»)


Случайные файлы

Файл
4448-1.rtf
168755.rtf
43413.rtf
143407.rtf
180557.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.