ПКРПСиБД LAB3 Бочаров И.А. (Лабораторная работа 3)
Описание файла
Файл "ПКРПСиБД LAB3 Бочаров И.А." внутри архива находится в папке "Лабораторная работа 3". Документ из архива "Лабораторная работа 3", который расположен в категории "". Всё это находится в предмете "распределённые ис и базы данных" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "распределённые ис и базы данных" в общих файлах.
Онлайн просмотр документа "ПКРПСиБД LAB3 Бочаров И.А."
Текст из документа "ПКРПСиБД LAB3 Бочаров И.А."
Национальный исследовательский институт
Московский Энергетический Институт (Технический Университет)
Институт автоматики и вычислительной техники
Кафедра Прикладной математики
Лабораторная работа №3
по дисциплине:
Проектирование крупных распределенных программных систем и баз данных
тема: «Разработка одного из порождающих паттернов»
Выполнил:
Бочаров Иван Андреевич
Проверил:
к.т.н., доц. Куриленко Иван Евгеньевич
Москва
2012 г.
Шаблон проектирования «Строитель»
Категория шаблона
Шаблон проектирования «Строитель» относится к порождающим шаблонам проектирования.
Описание шаблона
Данный шаблон отделяет конструирование объекта от его представления, так что в результате одного и того же процесса конструирования могут получаться разные представления.
Уместность применения
Шаблон следует применять, если:
-
Алгоритм создания сложного объекта не должен зависеть от того, из каких частей состоит объект и как они стыкуются между собой
-
Процесс конструирования должен обеспечивать различные представления конструируемого объекта
Преимущества, достигаемые при использовании данного шаблона
Данный шаблон:
-
Позволяет изменять внутреннее представление продукта конструирования
-
Изолирует код, реализующий конструирование и представление
-
Дает более тонкий контроль над конструированием объекта
Недостатки данного шаблона
Конкретный строитель жестко связан с порождаемым им объектом, поэтому при внесении изменений в класс продукта скорее всего будет необходимо внести соответствующие изменения в класс-строитель.
Реализация
Mutator.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BuilderPattern
{
public interface Mutator
{
void SetLegs();
void SetTail();
void SetSwim();
void SetRoar();
Pet GetPet();
}
}
Pet.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BuilderPattern
{
public class Pet
{
public int legs;
public bool tail;
public bool is_swimming;
public string roar;
public void Roar() {Console.WriteLine(this.roar);}
}
}
Cat.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BuilderPattern
{
class Cat:Mutator
{
private readonly Pet Animal = new Pet();
public Pet GetPet() { return Animal; }
public void SetLegs()
{
Animal.legs = 4;
}
public void SetTail()
{
Animal.tail = true;
}
public void SetSwim()
{
Animal.is_swimming = true;
}
public void SetRoar()
{
Animal.roar = "Meow!!!";
}
}
}
Dog.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BuilderPattern
{
class Dog:Mutator
{
private readonly Pet Animal = new Pet();
public Pet GetPet() { return Animal; }
public void SetLegs() {
Animal.legs = 4;
}
public void SetTail() {
Animal.tail = true;
}
public void SetSwim() {
Animal.is_swimming = true;
}
public void SetRoar() {
Animal.roar = "Bark!!!";
}
}
}
Parrot.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BuilderPattern
{
class Parrot:Mutator
{
private readonly Pet Animal = new Pet();
public Pet GetPet() { return Animal; }
public void SetLegs()
{
Animal.legs = 2;
}
public void SetTail()
{
Animal.tail = true;
}
public void SetSwim()
{
Animal.is_swimming = false;
}
public void SetRoar()
{
Animal.roar = "Chik-chirik!!!";
}
}
}
AnimalOwner.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BuilderPattern
{
class AnimalOwner
{
Mutator mutator;
public AnimalOwner(Mutator mut) { this.mutator = mut; }
public Pet Mutate() {
mutator.SetLegs();
mutator.SetTail();
mutator.SetSwim();
mutator.SetRoar();
return mutator.GetPet();
}
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BuilderPattern
{
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
AnimalOwner ao = new AnimalOwner(cat);
Pet pet = ao.Mutate();
pet.Roar();
Console.ReadLine();
}
}
}
}
}
}
UML-диаграмма классов
Диаграмма последовательностей
Литература
-
Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. — СПб: Питер, 2001. — 368 с.: ил. (Серия «Библиотека программиста»)
-
http://en.wikipedia.org/wiki/Builder_pattern