Будівельник (Builder)
class Flour
{
public string Sort { get; set; }
}
class Salt
{ }
class Additives
{
public string Name { get; set; }
}
class Bread
{
public Flour Flour { get; set; }
public Salt Salt { get; set; }
public Additives Additives { get; set; }
public override string ToString()
{
StringBuilder sb = new StringBuilder();
if (Flour != null)
sb.Append(Flour.Sort + "\n");
if (Salt != null)
sb.Append("Соль \n");
if (Additives != null)
sb.Append("Добавки: " + Additives.Name + " \n");
return sb.ToString();
}
}
static void Main(string[] args)
{
Baker baker = new Baker();
BreadBuilder builder = new RyeBreadBuilder();
Bread ryeBread = baker.Bake(builder);
Console.WriteLine(ryeBread.ToString());
builder = new WheatBreadBuilder();
Bread wheatBread = baker.Bake(builder);
Console.WriteLine(wheatBread.ToString());
Console.Read();
}
abstract class BreadBuilder
{
public Bread Bread { get; private set; }
public void CreateBread()
{
Bread = new Bread();
}
public abstract void SetFlour();
public abstract void SetSalt();
public abstract void SetAdditives();
}
class Baker
{
public Bread Bake(BreadBuilder breadBuilder)
{
breadBuilder.CreateBread();
breadBuilder.SetFlour();
breadBuilder.SetSalt();
breadBuilder.SetAdditives();
return breadBuilder.Bread;
}
}
class RyeBreadBuilder : BreadBuilder
{
public override void SetFlour()
{
this.Bread.Flour = new Flour { Sort = "Борошно чорне" };
}
public override void SetSalt()
{
this.Bread.Salt = new Salt();
}
public override void SetAdditives()
{
}
}
class WheatBreadBuilder : BreadBuilder
{
public override void SetFlour()
{
this.Bread.Flour = new Flour { Sort = "Борошно біле" };
}
public override void SetSalt()
{
this.Bread.Salt = new Salt();
}
public override void SetAdditives()
{
this.Bread.Additives = new Additives { Name = "Цукор" };
}
}