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

Uml диаграмма

Шаблон “ SINGLETON”

Категория

Порождающий

Описание

Гарантирует, что в системе возможно создание только одного экземпляра данного класса и предоставляет интерфейс для его создания.

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

1) Если необходимо жестко регулировать кол-во объектов в системе

2) Объект таков, что логически возможен только один экземпляр объекта

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

1) контролируемый доступ к единственному экземпляру;

2) уменьшение числа имён;

Недостатки

1) Возможные проблемы в тестировании

2) Глобальные переменные плохи для ООП

Реализация

public class Singleton

{

private static Singleton mMember = null;

public readonly int mRandomValue;

private Singleton()

{

Random rnd = new Random();

mRandomValue=rnd.Next();

}

public static Singleton getSingletonObject()

{

if (mMember == null)

{

mMember = new Singleton();

}

return mMember;

}

}

static void Main(string[] args)

{

Singleton sng = Singleton.getSingletonObject();

Console.Out.WriteLine(sng.mRandomValue);

sng = Singleton.getSingletonObject();

Console.Out.WriteLine(sng.mRandomValue);

}

Шаблон “ multition”

Аналогичен паттерну Singleton, но осуществляет доступ к экземплярам объекта по ключу ( напримерgetInstanse(Stringkey) и создает экземпляр если он еще не создан.

Шаблон “ BUILDER”

Категория

Порождающий

Описание

Отделяет конструирование объекта от представления, так что в результате одного и того же процесса конструирования могут получаться разные представления.

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

1 ) Позволяет изменять внутреннее представление продукта конструирования

2) Изолирует код, реализующий конструирование и представление

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

1) контролируемый доступ к единственному экземпляру;

2) уменьшение числа имён;

Недостатки

Жесткая привязка к порождаемому объекту, поэтому при внесении изменений в класс продукта возможно появится необходимость внести изменения в класс-строитель.

Реализация

public class Barmen

{

CoctailBuilder mBuilder;

public void setCoctailBuilder(CoctailBuilder cb)

{ mBuilder = cb;

}

public Coctail getCoctail()

{

return mBuilder.getCoctail();

}

public void constructCoctail()

{

mBuilder.createNewCoctail();

mBuilder.buildIce();

mBuilder.buildAlcohol();

mBuilder.buildSyrop();

mBuilder.buildFruit();

}

}

public class Coctail

{

private string mAlcohol = "";

private string mIce = "";

private string mSyrop = "";

private string mFruit = "";

public void setAlcohol(String aAlcohol)

{

mAlcohol = aAlcohol;

}

public void setIce(String aIce)

{

mIce = aIce;

}

public void setSyrop(String aIce)

{

mIce = aIce;

}

public void setFruit(String aFruit)

{

mFruit = aFruit;

}

}

public abstract class CoctailBuilder

{

protected Coctail mCoctail;

public Coctail getCoctail()

{

return mCoctail;

}

public void createNewCoctail()

{

mCoctail = new Coctail();

}

public abstract void buildIce();

public abstract void buildSyrop();

public abstract void buildFruit();

public abstract void buildAlcohol();

}

public class MohitoBuilder : CoctailBuilder

{

public override void buildIce()

{

mCoctail.setIce("SNOW");

}

public override void buildSyrop()

{

mCoctail.setSyrop("SPRITE");

}

public override void buildAlcohol()

{

mCoctail.setAlcohol("RUM");

}

public override void buildFruit()

{

mCoctail.setFruit("LIME");

}

}

public class PinaColladaBuilder : CoctailBuilder

{

public override void buildIce()

{

mCoctail.setIce("CUBE");

}

public override void buildSyrop()

{

mCoctail.setSyrop("MILK");

}

public override void buildAlcohol()

{

mCoctail.setAlcohol("VODKA");

}

public override void buildFruit()

{

mCoctail.setFruit("PINEAPPLE");

}

}

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