ПКРПСиБД LAB3 Буренков С. (Лабораторная работа 3)
Описание файла
Файл "ПКРПСиБД LAB3 Буренков С." внутри архива находится в папке "Лабораторная работа 3". Документ из архива "Лабораторная работа 3", который расположен в категории "". Всё это находится в предмете "распределённые ис и базы данных" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "распределённые ис и базы данных" в общих файлах.
Онлайн просмотр документа "ПКРПСиБД LAB3 Буренков С."
Текст из документа "ПКРПСиБД LAB3 Буренков С."
Национальный исследовательский университет
«Московский энергетический институт»
Лабораторная работа №3
По курсу «Проектирование крупных распределенных программных систем и баз данных »
Реализация одного из порождающих шаблонов проектирования
Выполнил студент
группы А-13-08
Буренков Сергей
Проверил
доц., к.т.н. Куриленко
Иван Евгеньевич
Москва, 2012 год
Оглавление
Объект-одиночка (singleton) 3
Описание 3
Уместность применения 3
Преимущества, достигаемые при применении шаблона 3
Недостатки шаблона 3
Детали реализации 3
UML-диаграммы 5
Литература 6
Мультитон (multiton) 7
Описание 7
Уместность применения 7
Преимущества, достигаемые при применении шаблона 7
Недостатки шаблона 7
Детали реализации 7
UML-диаграммы 9
Литература 11
Объект-одиночка (singleton)
Порождающий шаблон
Описание
Паттерн одиночка гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
Существует много объектов, которые нужны нам только в единственном экземпляре: пулы программных потоков, кэши ,диалоговые окна, объекты ведения журнала, объекты драйверов устройств… Более того, для многих типов таких объектов попытка создания более одного экземпляра приведет к всевозможным проблемам – некорректному поведению программы, лишним затратам ресурсов или нелогичным результатам.
Уместность применения
Шаблон следует применять для объектов, существующих в единственном экземпляре.
Преимущества, достигаемые при применении шаблона
1. Применение шаблона позволяет достичь эффекта использования глобальной переменной без ее недостатков: в отличие от глобальной переменной, одиночка может быть создан не в начале работы приложения, а в тот момент, когда в нем появилась необходимость (отложенная инициализация).
Недостатки шаблона
1. При реализации на многопоточных приложениях необходимо задействовать дополнительные средства, обеспечивающие синхронизацию объекта класса.
2. Использование механизма наследования применительно к одиночкам затруднено или не допускается вовсе.
Детали реализации
Шаблон реализуется следующим образом:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Singleton
{
public class ChocolateBoiler
{
private bool empty;
private bool boiled;
private static ChocolateBoiler uniqueInstance;
private ChocolateBoiler()
{
empty = true;
boiled = false;
}
public static ChocolateBoiler getInstance()
{
if (uniqueInstance == null)
uniqueInstance = new ChocolateBoiler();
return uniqueInstance;
}
public void fill()
{
if (isEmpty())
{
empty = false;
boiled = false;
// Заполнение нагревателя
Console.WriteLine("Котел заполнен");
}
}
public void drain()
{
if (!isEmpty() && isBoiled())
{
// Слить нагретое
Console.WriteLine("Содержимое котла слито");
empty = true;
}
}
public void boil()
{
if (!isEmpty() && !isBoiled())
{
// Довести содержимое до кипения
Console.WriteLine("Содержимое котла доведено до кипения");
boiled = true;
}
}
public bool isEmpty()
{
return empty;
}
public bool isBoiled()
{
return boiled;
}
}
class Program
{
static void Main(string[] args)
{
ChocolateBoiler boiler = ChocolateBoiler.getInstance();
Console.Write("boiler : ");
boiler.fill();
Console.ForegroundColor = ConsoleColor.Yellow;
ChocolateBoiler boiler2 = ChocolateBoiler.getInstance();
Console.Write("boiler2: ");
Console.WriteLine("Содержимое котла доведено до кипения? - " + Convert.ToString(boiler2.isBoiled()));
Console.ResetColor();
Console.Write("boiler : ");
boiler.boil();
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("boiler2: ");
Console.WriteLine("Содержимое котла доведено до кипения? - " + Convert.ToString(boiler2.isBoiled()));
Console.ResetColor();
Console.Write("boiler : ");
boiler.drain();
Console.ReadKey();
return;
}
}
}
UML-диаграммы
Диаграммы выполняются в Visual Studio 2010
Литература
1. Эрик Фримен, Элизабет Фримен, Кэтти Сьерра, Берт Беётс. Паттерны проектирования. – СПб.: Питер, 2012. – 656 с.
Мультитон (multiton)
Порождающий шаблон
Описание
В инженерии программного обеспечения паттерн мультитон (пул одиночек) подобен паттерну-одиночке, который позволяет создавать только один объект класса. Паттерн мультитон расширяет концепцию одиночки посредством управления картой именованных экземпляров как пар «ключ-значение».
Вместо создания одного экземпляра для приложения, паттерн мультитон обеспечивает один экземпляр для каждого ключа.
Уместность применения
Шаблон следует применять, если необходимо предоставить доступ к определенным данным из различных блоков приложения. Другой случай – взаимодействие с аппаратным обеспечением через экземпляры одного и того же класса. Например, обмен данными с сетью контроллеров, опрос группы серверов или рабочих станций в сети. Все эти примеры объединяет одно: число экземпляров класса может (и даже должно) быть ограничено и они глобальные для всего приложения.
Преимущества, достигаемые при применении шаблона
1. Применение шаблона позволяет достичь того же эффекта, что и применение паттерна одиночка, но может использоваться как с жестко заданным списком экземпляров, так и с созданием по требованию.
Недостатки шаблона
1. Минусом шаблона является возможность появления большого числа зависимых от него частей приложения.
Детали реализации
Шаблон реализуется следующим образом:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Multitone
{
class Timetable
{
private static readonly Dictionary
private int[] day;
private Timetable()
{
day = new int[31];
for (int i = 0; i < 31; i++)
day[i] = 0;
}
public void setPlan(int d, int plan)
{
this.day[d] = plan;
return;
}
public int getPlan(int d)
{
return this.day[d];
}
public void Viewer()
{
for (int d = 0; d < 7; d++)
{
for (int i = d; i < 31; i += 7)
{
Console.Write(Convert.ToString(i + 1) + " - " + Convert.ToString(this.day[i]) + " ");
}
Console.WriteLine();
}
}
public static Timetable getInstance(string key)
{
Timetable instance;
lock (_instances)
{
if (!_instances.TryGetValue(key, out instance))
{
instance = new Timetable();
_instances.Add(key, instance);
}
return instance;
}
}
}
class Program
{
static void Main(string[] args)
{
Timetable January = Timetable.getInstance("Январь");
January.setPlan(3, 4);
January.setPlan(5, 1);
January.setPlan(24, 2);
Console.WriteLine("Январь");
January.Viewer();
Console.WriteLine();
Timetable February = Timetable.getInstance("Февраль");
February.setPlan(1, 2);
February.setPlan(2, 4);
February.setPlan(3, 1);
February.setPlan(5, 4);
February.setPlan(8, 2);
February.setPlan(13, 1);
February.setPlan(21, 2);
Console.WriteLine("Февраль");
February.Viewer();
Console.WriteLine();
Timetable February2 = Timetable.getInstance("Февраль");
Console.WriteLine("Создание еще одного расписания 'Февраль'");
February.Viewer();
Console.ReadKey();
}
}
}
UML-диаграммы
Литература
1. Порождающие шаблоны: Пул одиночек – [Электронный ресурс] – http://andrey.moveax.ru/patterns/oop/creational/multiton/
2. Multiton pattern – [Электронный ресурс] – en.wikipedia.org/wiki/Multiton_pattern