Lab4 (Лабораторные работы РИСиБД)
Описание файла
Файл "Lab4" внутри архива находится в папке "Лабораторные работы РИСиБД". Документ из архива "Лабораторные работы РИСиБД", который расположен в категории "". Всё это находится в предмете "распределённые ис и базы данных" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "распределённые ис и базы данных" в общих файлах.
Онлайн просмотр документа "Lab4"
Текст из документа "Lab4"
Национальный исследовательский университет
«Московский Энергетический Институт»
Институт автоматики и вычислительной техники
Кафедра прикладной математики
Лабораторная работа №4
По дисциплине «Проектирование крупных программных систем и баз данных»
На тему «Реализация одного из поведенческих шаблонов проектирования»
Выполнила студентка
Группы А-13-08
Степная Е.В.
Проверил
Куриленко И.Е.
Москва, 2012
Шаблон проектирования
Необходимо реализовать поведенческий шаблон проектирования подписчик событий (Event Listener).
Описание
Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии.
Например, электронная таблица и диаграмма не знают друг о друге, хотя работают с одним и тем же набором данных. Однако, когда пользователь изменяет данных в таблице они отображаются на диаграмме и наоборот.
Уместность применения
Шаблон применяется в тех случаях, когда система обладает следующими свойствами:
-
существует, как минимум, один объект, рассылающий сообщения;
-
имеется не менее одного получателя сообщений, причём их количество и состав могут изменяться во время работы приложения;
-
нет надобности очень сильно связывать взаимодействующие объекты, что полезно для повторного использования.
Данный шаблон часто применяют в ситуациях, в которых отправителя сообщений не интересует, что делают получатели с предоставленной им информацией.
Преимущества, достигаемые при применении шаблона
-
Для работы с одним набором данных может существовать любое число пользовательских интерфейсов;
-
У субъекта может быть любое количество зависимых от него наблюдателей;
-
Автоматически обновляются все зависящие от субъекта наблюдатели.
Недостатки шаблона
-
Неожиданные обновления.
Реализация
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Collections;
namespace Lab4EventListener
{
class Simulator : IEnumerable
{
string[] moves = { "5", "3", "1", "6", "7" };
public IEnumerator GetEnumerator()
{
foreach (string element in moves)
yield return element;
}
}
class Subject
{
public delegate void Callback(string s);
public event Callback Notify;
Simulator simulator = new Simulator();
const int speed = 200;
public string SubjectState { get; set; }
public void Go()
{
new Thread(new ThreadStart(Run)).Start();
}
void Run()
{
foreach (string s in simulator)
{
Console.WriteLine("Subject: " + s);
SubjectState = s;
Notify(s);
Thread.Sleep(speed); // milliseconds
}
}
}
interface IObserver
{
void Update(string state);
}
class Observer : IObserver
{
string name;
Subject subject;
string state;
string gap;
public Observer(Subject subject, string name, string gap)
{
this.subject = subject;
this.name = name;
this.gap = gap;
subject.Notify += Update;
}
public void Update(string subjectState)
{
state = subjectState;
Console.WriteLine(gap + name + ": " + state);
}
}
class Program
{
static void Main(string[] args)
{
Subject subject = new Subject();
Observer Observer = new Observer(subject, "Center", "\t\t");
Observer observer2 = new Observer(subject, "Right", "\t\t\t\t");
subject.Go();
// Wait for user
Console.Read();
}
}
}
UML-диаграммы
Диаграмма классов
Диаграмма последовательности
Литература
-
http://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D0%B1%D0%BB%D1%8E%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
-
http://www.ocenicode.com/node/8
-
http://youdevelop.ru/observer/