ПКРПСиБД LAB4 Бочаров И.А. (Лабораторная работа 4)
Описание файла
Файл "ПКРПСиБД LAB4 Бочаров И.А." внутри архива находится в папке "Лабораторная работа 4". Документ из архива "Лабораторная работа 4", который расположен в категории "". Всё это находится в предмете "распределённые ис и базы данных" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "распределённые ис и базы данных" в общих файлах.
Онлайн просмотр документа "ПКРПСиБД LAB4 Бочаров И.А."
Текст из документа "ПКРПСиБД 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-диаграмма классов
Диаграмма последовательностей
Литература
-
Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. — СПб: Питер, 2001. — 368 с.: ил. (Серия «Библиотека программиста»)