Лабораторная работа 3 (ПКРПСиБД 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-диаграмма классов

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

Литература

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

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






Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.