Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные работы / Лабораторная работа 3 / ПКРПСиБД LAB3 Бочаров И.А

..docx
Скачиваний:
22
Добавлен:
28.06.2014
Размер:
103.93 Кб
Скачать

Национальный исследовательский институт

Московский Энергетический Институт (Технический Университет)

Институт автоматики и вычислительной техники

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

Лабораторная работа №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-диаграмма классов

Диаграмма последовательностей

Литература

  1. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. — СПб: Питер, 2001. — 368 с.: ил. (Серия «Библиотека программиста»)

  2. http://en.wikipedia.org/wiki/Builder_pattern

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