ПКРПСиБД LAB3 Буренков С. (548643)
Текст из файла
Национальный исследовательский университет
«Московский энергетический институт»
Лабораторная работа №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
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.