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

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

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

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

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

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

по дисциплине:

Проектирование крупных распределенных программных систем и баз данных

тема: «Реализация порождающего шаблона проектирования»

Выполнил:

Бычков А.С.

Москва

2012 г.

Шаблон “ABSTRACTFACTORY”

Категория

Порождающий

Описание

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

Уместность применения

1) Паттерн используется в случаях когда система не должна зависеть от того, как создаются, компонуются входящие в нее объекты.

2) Входящие в одно семейство объекты должны использоваться вместе и необходимо выполнить это условие

3) Система конфигурируетс я одним из семейств составляющих их объектов.

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

1) гарантирует сочетаемость продуктов

2) упрощает замену семейств продуктов

Недостатки

1) трудно поддержать добавление нового объекта в семейство.

Реализация

public enum BlanketType { SINGLE, DOUBLE };

public class ClassicBlanket : IBlanket

{

public ClassicBlanket(BlanketType aType)

{

mType = aType;

}

public int getWidth()

{

switch (mType)

{

case BlanketType.SINGLE:

return 80;

case BlanketType.DOUBLE:

return 170;

default: return -1;

}

}

public int getHeight()

{

switch (mType)

{

case BlanketType.SINGLE:

return 125;

case BlanketType.DOUBLE:

return 250;

default: return -1;

}

}

public BlanketType getType()

{

return mType;

}

private BlanketType mType;

}

class ClassicPillow : IPillow

{

public int getWidth()

{

return 60;

}

public int getHeight()

{

return 40;

}

}

public class ClassicStuffFactory : IBedroomStuffFactory

{

public IPillow createPillow()

{

return new ClassicPillow();

}

public IBlanket createBlanket(BlanketType type)

{

return new ClassicBlanket(type);

}

}

public class EuroBlanket : IBlanket

{

public EuroBlanket(BlanketType aType)

{

mType = aType;

}

public int getWidth()

{

switch (mType)

{

case BlanketType.SINGLE:

return 90;

case BlanketType.DOUBLE:

return 180;

default: return -1;

}

}

public int getHeight()

{

switch (mType)

{

case BlanketType.SINGLE:

return 105;

case BlanketType.DOUBLE:

return 210;

default: return -1;

}

}

public BlanketType getType()

{

return mType;

}

private BlanketType mType;

}

class EuroPillow : IPillow

{

public int getWidth()

{

return 70;

}

public int getHeight()

{

return 50;

}

}

public class EuroStuffFactory : IBedroomStuffFactory

{

public IPillow createPillow()

{

return new EuroPillow();

}

public IBlanket createBlanket(BlanketType type)

{

return new EuroBlanket(type);

}

}

public interface IBedroomStuffFactory

{

IPillow createPillow();

IBlanket createBlanket(BlanketType type);

}

public interface IBlanket

{

int getWidth();

int getHeight();

BlanketType getType();

}

public interface IPillow

{

int getWidth();

int getHeight();

}

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