ПКРПСиБД LAB3 Машеров Д.Е. (Лабораторная работа 3), страница 2
Описание файла
Файл "ПКРПСиБД LAB3 Машеров Д.Е." внутри архива находится в папке "Лабораторная работа 3". Документ из архива "Лабораторная работа 3", который расположен в категории "". Всё это находится в предмете "распределённые ис и базы данных" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "распределённые ис и базы данных" в общих файлах.
Онлайн просмотр документа "ПКРПСиБД LAB3 Машеров Д.Е."
Текст 2 страницы из документа "ПКРПСиБД LAB3 Машеров Д.Е."
public static ObjectPool Instance
{
get
{
if (instance == null)
{
instance = new ObjectPool();
}
return instance;
}
}
public Resource getResource()
{
if (resources.Count == 0)
{
Console.WriteLine("Ресурс создается ");
return new Resource();
}
else
{
Console.WriteLine("Ресурс используется заново");
Resource resource = resources.First();
resources.RemoveAt(0);
return resource;
}
}
public void returnResource(Resource resource)
{
resource.Reset();
resources.Add(resource);
}
}
Программа
static void Main(string[] args)
{
ObjectPool op = ObjectPool.Instance;
Resource r1 = op.getResource();
r1.Value = 123;
Console.WriteLine("Значение ресурса: " + r1.Value);
Resource r2 = op.getResource();
op.returnResource(r1);
op.returnResource(r2);
r1 = op.getResource();
Console.WriteLine("Значение ресурса: " + r1.Value);
Console.Read();
}
UML-диаграмма
Диаграмма классов:
Диаграмма последовательности
Литература
-
http://www.oracle.com/technetwork/systems/index-156457.html#11.1.3.6
-
http://andrey.moveax.ru/patterns/oop/creational/prototype/
-
http://ru.wikipedia.org/wiki/Объектный_пул
Шаблон проектирования «Строитель»
Категория
Порождающие шаблоны проектирования
Описание
Отделяет конструирование сложного объекта от его представления, так что в результате одного и того же процесса конструирования могут получаться разные представления.
Уместность применения
Шаблон применяется, если
-
Алгоритм создания сложного объекта не должен зависеть от того, из каких частей состоит объект и как они стыкуются между собой;
-
Процесс конструирования должен обеспечивать различные представления конструируемого объекта.
Преимущества, достигаемые при применении шаблона
-
Возможность контролировать процесс создания сложного продукта.
2. Возможность получения разных представлений некоторых данных.
Недостатки шаблона
Класс конкретного строителя и создаваемый им продукт жестко связаны между собой, поэтому при внесеннии изменений в класс продукта скорее всего придется соотвествующим образом изменять и класс конкретного строителя.
Детали реализации
TVProgram.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Builder_pattern
{
public class TVProgram
{
public string Type;
public int ViewersNumber;
public string Channel;
// Минуты
public int RunningTime;
public int StartHour;
public int StartMinute;
public string Decsription;
}
}
TVProgramBuilder.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Builder_pattern
{
public interface TVProgramBuilder
{
void setType();
void setViewersNumber();
void setChannel();
void setRunningTime();
void setStartTime();
void setDescription();
TVProgram getTVProgram();
}
}
Cartoon.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Builder_pattern
{
class Cartoon : TVProgramBuilder
{
TVProgram tvp = new TVProgram();
public TVProgram getTVProgram() { return tvp; }
public void setType()
{
tvp.Type = "Cartoon";
}
public void setViewersNumber()
{
tvp.ViewersNumber = 9000;
}
public void setChannel()
{
tvp.Channel = "Россия";
}
public void setRunningTime()
{
tvp.RunningTime = 10;
}
public void setStartTime()
{
tvp.StartHour = 9;
tvp.StartMinute = 0;
}
public void setDescription()
{
tvp.Decsription = "Детский мультфильм";
}
}
}
NewsAt9.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Builder_pattern
{
class NewsAt9 : TVProgramBuilder
{
TVProgram tvp = new TVProgram();
public TVProgram getTVProgram() { return tvp; }
public void setType()
{
tvp.Type = "News";
}
public void setViewersNumber()
{
tvp.ViewersNumber = 860000;
}
public void setChannel()
{
tvp.Channel = "1 канал";
}
public void setRunningTime()
{
tvp.RunningTime = 15;
}
public void setStartTime()
{
tvp.StartHour = 21;
tvp.StartMinute = 0;
}
public void setDescription()
{
tvp.Decsription = "Новости в 9 часов";
}
}
}
Sitcom.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Builder_pattern
{
class SomeSitcom : TVProgramBuilder
{
TVProgram tvp = new TVProgram();
public TVProgram getTVProgram() { return tvp; }
public void setType()
{
tvp.Type = "Sitcom";
}
public void setViewersNumber()
{
tvp.ViewersNumber = 50000;
}
public void setChannel()
{
tvp.Channel = "СТС";
}
public void setRunningTime()
{
tvp.RunningTime = 20;
}
public void setStartTime()
{
tvp.StartHour = 19;
tvp.StartMinute = 30;
}
public void setDescription()
{
tvp.Decsription = "Какой-то ситком";
}
}
}
TVCompiler.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Builder_pattern
{
class TVCompiler
{
TVProgramBuilder tvpBuilder;
public TVCompiler(TVProgramBuilder tvpBuilder) { this.tvpBuilder = tvpBuilder; }
public TVProgram Create()
{
tvpBuilder.setType();
tvpBuilder.setChannel();
tvpBuilder.setRunningTime();
tvpBuilder.setStartTime();
tvpBuilder.setDescription();
return tvpBuilder.getTVProgram();
}
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Builder_pattern
{
class Program
{
static void Main(string[] args)
{
SomeSitcom sitcom = new SomeSitcom();
TVCompiler tva = new TVCompiler(sitcom);
TVProgram tvp = tva.Create();
Console.Write(tvp.Decsription);
Console.Read();
}
}
}
UML-диаграмма
Диаграмма классов:
Диаграмма последовательности
Литература
-
http://cpp-reference.ru/patterns/creational-patterns/builder/
-
http://en.wikipedia.org/wiki/Builder_pattern
Шаблон проектирования «Объект-одиночка (singleton).»
Категория
Порождающие шаблоны проектирования
Описание
Объект-одиночка (singleton) – это шаблон проектирования, при котором у класса существкует толкьо один экземпляр и предоставляет к экземпляру глобальную точку доступа.
Уместность рименения
Шаблон применяется, если
-
должен быть ровно один экземпляр некоторого класса, легко доступный всем клиентам;
-
единственный экземпляр должен расширяться путем порождения подклассов, и клиентам нужно иметь возможность работать с расширенным экземпляром без модификации своего кода.
Преимущества, достигаемые при применении шаблона
-
контролируемый доступ к единственному экземпляру;
-
уменьшение числа имён;
-
допускает уточнение операций и представления;
Недостатки шаблона
-
Глобальные объекты могут быть вредны для объектного программирования, в некоторых случаях приводя к созданию немасштабируемого проекта.
-
усложняет написание модульных тестов
Детали реализации
Класс синглтон
class Singleton
{
static Singleton instance;
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
public int Property
{
get;
set;
}
}
Program.cs
static void Main(string[] args)
{
Singleton instance = Singleton.Instance;
instance.Property = 3;
Console.WriteLine("Значение свойства: " + instance.Property);
instance.Property = 2;
Console.WriteLine("Значение свойства: " + instance.Property);
Console.Read();
}
UML-диаграмма
Диаграмма классов:
Диаграмма последовательности
Литература
1. http://ru.wikipedia.org/wiki/Одиночка_(шаблон_проектирования)
2. http://msdn.microsoft.com/en-us/library/ff650316.aspx
Шаблон проектирования «Мультитон (multiton).»
Категория
Порождающие шаблоны проектирования
Описание
Мультитон -шаблон проектирования, близкий к шаблону одиночка, который позволяет создать только один экземпляр объекта. Мультитон расширяет это понятие, путем использования набора экземпляров по принципу ключ-значение.
Уместность рименения
Шаблон применяется, если необходимо реализовать большое количество экземпляров-одиночек в одной программе.
Преимущества, достигаемые при применении шаблона
-
Шаблон может использоваться как с жестко заданным списком экземпляров, так и с созданием по требованию.
-
Если список фиксированный, то возможно создание всех экземпляров при старте программы или обращению к любому из них.
Недостатки шаблона
-
Так же как и шаблон одиночка, усложняет написание модульных тестов
-
В языках со сбором мусора, применение данного шаблона может стать источником утечки памяти, поскольку будут присутсвовать глобальные сильные связи с экземплярами.
.Детали реализации
Класс мультитон
class Multiton
{
static Dictionary
Multiton() { }
public static Multiton Instance(object key)
{
Multiton instance;
if (!instances.TryGetValue(key, out instance))
{
instance = new Multiton();
instances.Add(key, instance);
}
return instance;
}
public int Property
{
get;
set;
}
}
Program.cs
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Новый объект");
Multiton instance1 = Multiton.Instance("Ключ 1");
instance1.Property = 3;
Console.WriteLine("Значение свойства: " + instance1.Property);
instance1.Property = 2;
Console.WriteLine("Значение свойства: " + instance1.Property);
Multiton instance2 = Multiton.Instance(123);
instance2.Property = 11;
Console.WriteLine("Новый объект");
Console.WriteLine("Значение свойства: " + instance2.Property);
Console.Read();
}
}
UML-диаграмма
Диаграмма классов:
Диаграмма последовательности
Литература
1. http://en.wikipedia.org/wiki/Multiton_pattern
2. http://andrey.moveax.ru/patterns/oop/creational/multiton/