Лабораторная работа 4 (ПКРПСиБД 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/


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

Файл
AVTORE~1.DOC
124121.rtf
80876.rtf
163441.rtf
59731.rtf




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