Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы / Лабораторная работа 3 / ПКРПСиБД LAB3 Моисеев Н.А..docx
Скачиваний:
21
Добавлен:
28.06.2014
Размер:
146.26 Кб
Скачать

НИУ Московский Энергетический Институт

Кафедра прикладной математики

Лабораторная работа №3 по

дисциплине: «Распределённые информационные системы и

базы данных»

Реализация порождающих шаблонов проектирования

Студент:

Моисеев Н.А.

Группа:

А-13-07

Преподаватель:

Куриленко И.Е.

Москва 2012

Абстрактная фабрика.

Описание

Абстрактная фабрика (англ. Abstract factory) — порождающий шаблон проектирования, позволяющий изменять поведение системы, варьируя создаваемые объекты, при этом сохраняя интерфейсы. Он позволяет создавать целые группы взаимосвязанных объектов, которые, будучи созданными одной фабрикой, реализуют общее поведение.

Применение

Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов.

Преимущества

  • Изолирует конкретные классы;

  • Упрощает замену семейств продуктов;

  • Гарантирует сочетаемость продуктов

Недостатки

  • Сложно добавить поддержку нового вида продуктов.

Детали реализации

public abstract class UnitAbstractFactory

{

public abstract IProductive CreateProductive(int x, int y);

public abstract IWorker CreateWorker();

public abstract IWarrior CreateWarrior();

}

public class GnomeFactory : UnitAbstractFactory

{

public GnomeFactory()

{

Console.WriteLine();

Console.WriteLine("============================");

Console.WriteLine("Move gnomes:");

Console.WriteLine();

}

public override IProductive CreateProductive(int x, int y)

{

return new Mine(x, y);

}

public override IWorker CreateWorker()

{

return new Miner();

}

public override IWarrior CreateWarrior()

{

return new Axer();

}

}

public class HumanFactory : UnitAbstractFactory

{

public HumanFactory()

{

Console.WriteLine();

Console.WriteLine("============================");

Console.WriteLine("Move humans:");

Console.WriteLine();

}

public override IProductive CreateProductive(int x, int y)

{

return new Ferma(x, y);

}

public override IWorker CreateWorker()

{

return new Fermer();

}

public override IWarrior CreateWarrior()

{

return new Knight();

}

}

Диаграмма классов

Фабричный метод

Описание

Фабричный метод (англ. Factory Method) — порождающий шаблон проектирования, предоставляющий подклассам интерфейс для создания экземпляров некоторого класса. В момент создания наследники могут определить, какой класс создавать. Иными словами, Фабрика делегирует создание объектов наследникам родительского класса.

Применение

Используется, когда:

  • Классу заранее неизвестно, объекты каких подклассов ему нужно создавать.

  • Класс спроектирован так, чтобы объекты, которые он создаёт, специфицировались подклассами.

  • Класс делегирует свои обязанности одному из нескольких вспомогательных подклассов, и планируется локализовать знание о том, какой класс принимает эти обязанности на себя.

Преимущества

  • позволяет сделать код создания объектов более универсальным, не привязываясь к конкретным классам, а оперируя лишь общим интерфейсом ;

  • позволяет установить связь между параллельными иерархиями классов.

Недостатки

  • необходимость создавать наследника для каждого нового типа продукта.

Детали реализации

public abstract class GameObject

{

protected GameObject()

{

Console.WriteLine("Create " + GetType().Name);

}

}

public class Unit : GameObject

{

}

public class Terrain : GameObject

{

}

public abstract class Creator

{

public abstract GameObject FactoryMethod();

}

public class UnitCreator : Creator

{

public override GameObject FactoryMethod()

{

return new Unit();

}

}

public class TerrainCreator : Creator

{

public override GameObject FactoryMethod()

{

return new Terrain();

}

}

class Program

{

static void Main()

{

var creators = new Creator[] {new UnitCreator(), new TerrainCreator()};

foreach (var gameObject in creators.Select(creator =>

creator.FactoryMethod()))

{

}

Console.ReadLine();

}

}

Соседние файлы в папке Лабораторная работа 3