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");
}
}