using System.Collections.Generic;
using UnityEngine;
public class BuilderPattern : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
IBuilder fatbuilder = new FatBuilder();
Person p = Director.Construct(fatbuilder);
p.Show();
}
}
class Person
{
List<string> parts = new List<string>();
public void AddPart(string part)
{
parts.Add(part);
}
public void Show()
{
foreach (string part in parts)
{
Debug.Log(part);
}
}
}
class FatPerson : Person { }
class ThinPerson : Person { }
interface IBuilder
{
void AddHead();
void AddBody();
void AddHand();
void AddFeet();
Person GetResult();
}
class FatBuilder : IBuilder
{
private Person person;
public FatBuilder()
{
person = new Person();
}
public void AddBody()
{
person.AddPart("bigbody");
}
public void AddFeet()
{
person.AddPart("bigfeet");
}
public void AddHand()
{
person.AddPart("bighand");
}
public void AddHead()
{
person.AddPart("bighead");
}
public Person GetResult()
{
return person;
}
}
class ThinBuilder : IBuilder
{
private Person person;
public ThinBuilder()
{
person = new Person();
}
public void AddBody()
{
person.AddPart("thinbody");
}
public void AddFeet()
{
person.AddPart("thinfeet");
}
public void AddHand()
{
person.AddPart("thinhand");
}
public void AddHead()
{
person.AddPart("thinhead");
}
public Person GetResult()
{
return person;
}
}
class Director
{
public static Person Construct(IBuilder builder)
{
builder.AddHand();
builder.AddBody();
builder.AddHand();
builder.AddFeet();
return builder.GetResult();
}
}