ПКРПСиБД LAB3 Моисеев Н.А. (548655), страница 2
Текст из файла (страница 2)
public void BuildFooter(FooterData footer) { _page.AddFooter(footer); }
public Page GetResult() { return _page; }
}
public class PrintPageBuilder : IPageBuilder
{
private readonly Page _page = new Page();
private static PostData PreparePostToPrinter(Data.Data post)
{
return new PostData { Text = "PrintPost" + post.Text.Last() };
}
public void BuildHeader(HeaderData header) { }
public void BuildMenu(MenuItems menuItems) { }
public void BuildPost(PostData post)
{
var postToPrint = PreparePostToPrinter(post);
_page.AddPost(postToPrint);
}
public void BuildFooter(FooterData footer) { }
public Page GetResult() { return _page; }
}
class Program
{
static void Main(string[] args)
{
var pageBuilder = new PageBuilder();
new PageDirector(pageBuilder).BuildPage(1);
var page = pageBuilder.GetResult();
Post(page);
Console.WriteLine();
Console.WriteLine();
var pageBuilder2 = new PrintPageBuilder();
new PageDirector(pageBuilder2).BuildPage(2);
var page2 = pageBuilder2.GetResult();
Post(page2);
Console.ReadKey();
}
private static void Post(Page page)
{
page.Print();
}
}
Диаграмма классов
Одиночка
Описание
Паттерн одиночка гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
Преимущества
-
Контролируемый доступ к единственному экземпляру
Недостатки
-
Глобальные объекты могут быть вредны для объектного программирования, в некоторых случаях приводя к созданию не масштабируемого проекта.
-
Усложняет написание модульных тестов и следование TDD
Детали реализации
public class Singleton
{
private static readonly object SyncRoot = new object();
private static Singleton _instance;
private Singleton(){}
public static Singleton Instance
{
get
{
if (_instance == null)
{
lock (SyncRoot)
{
if (_instance == null)
{
Console.WriteLine("Создание объекта");
_instance = new Singleton();
}
}
}
Console.WriteLine("Возвращение объекта");
return _instance;
}
}
}
Диаграмма классов
Мультитон
Описание
Гарантирует, что класс имеет поименованные экземпляры объекта и обеспечивает глобальную точку доступа к ним
Преимущества
-
Применение шаблона позволяет достичь того же эффекта, что и применение паттерна одиночка, но может использоваться как с жестко заданным списком экземпляров, так и с созданием по требованию.
Недостатки
-
Минусом шаблона является возможность появления большого числа зависимых от него частей приложения.
Детали реализации
public class Multiton
{
private static readonly Dictionary
private Multiton() {}
public static Multiton GetInstance(object key)
{
lock (Instances)
{
Multiton instance;
if (!Instances.TryGetValue(key, out instance))
{
Console.WriteLine("Создаем объект:" + key);
instance = new Multiton();
Instances.Add(key, instance);
}
Console.WriteLine("Возвращаем объект: " + key);
return instance;
}
}
}
Диаграмма классов
Литература
-
http://wikipedia.org
-
Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес Приемы объектно-ориентированного проектирования. Паттерны проектирования
-
http://msdn.microsoft.com/