121 lines
2.4 KiB
C#
121 lines
2.4 KiB
C#
/* Строитель
|
||
Разделяет создание сложного объекта
|
||
и его инициализацию так, что одинаковый
|
||
процесс построения может может создавать
|
||
объекты с разным состоянием
|
||
*/
|
||
class Program
|
||
{
|
||
static void Main()
|
||
{
|
||
#region Пример №1 - базовое
|
||
var rx = new Baker();
|
||
var bread = rx.Bake(new RBuilderBread());
|
||
|
||
Console.WriteLine(bread.ToString());
|
||
Console.ReadKey();
|
||
#endregion
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Мука
|
||
/// </summary>
|
||
class Floor
|
||
{
|
||
/// <summary>
|
||
/// Сорт муки
|
||
/// </summary>
|
||
public string Sort { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// Соль
|
||
/// </summary>
|
||
class Salt
|
||
{
|
||
/// <summary>
|
||
/// Масса
|
||
/// </summary>
|
||
public double Mass { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// Пищевые добавки
|
||
/// </summary>
|
||
class Additives
|
||
{
|
||
/// <summary>
|
||
/// Список пищевых добавок
|
||
/// </summary>
|
||
public string[] Names { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// Xлеб
|
||
/// </summary>
|
||
class Bread
|
||
{
|
||
public Floor Floor { get; set; }
|
||
public Salt Salt { get; set; }
|
||
public Additives Additives { get; set; }
|
||
|
||
public override string ToString()
|
||
{
|
||
return $"[F: {Floor.Sort}]---[S: {Salt.Mass}]---[A: {Additives.Names[0]}]";
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Строитель хлеба
|
||
/// </summary>
|
||
abstract class BreadBuilder
|
||
{
|
||
public Bread Bread { get; set; }
|
||
public void CreateBread()
|
||
{
|
||
Bread = new Bread();
|
||
}
|
||
|
||
public abstract void SetFloor();
|
||
public abstract void SetSalt();
|
||
public abstract void SetAdditives();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Пекарь
|
||
/// </summary>
|
||
class Baker
|
||
{
|
||
public Bread Bake(BreadBuilder breadBuilder)
|
||
{
|
||
breadBuilder.CreateBread();
|
||
breadBuilder.SetFloor();
|
||
breadBuilder.SetSalt();
|
||
breadBuilder.SetAdditives();
|
||
return breadBuilder.Bread;
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// Для ржаного хлеба строитель
|
||
/// </summary>
|
||
class RBuilderBread : BreadBuilder
|
||
{
|
||
public override void SetAdditives()
|
||
{
|
||
Bread.Additives = new Additives() { Names = new[] { "E222", "E297" } };
|
||
}
|
||
|
||
public override void SetFloor()
|
||
{
|
||
Bread.Floor = new Floor() { Sort = "R class" };
|
||
}
|
||
|
||
public override void SetSalt()
|
||
{
|
||
Bread.Salt = new Salt() { Mass = 3.44 };
|
||
}
|
||
}
|