Ce e Simple Factory? E o metoda de a crea in functie de anumit parametri instante ale unor clase diferite. Acest pattern (sau sablon – cum este tradus termenul in limba romana) este plementat intr-o clasa separata, a carui rol este acela de a lua decizia returnarii unei instante sau alteia in functie de anumiti parametrii.
Sa presupunem ca avem o clasa de baza, numita Person, abstracta. Din aceasta clasa derivam doua clase concrete: Child si Adult.
Clasa Person arata cam asa:
public abstract class Person
{
protected string name;
protected int age;
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
public abstract void Show();
}
public class Child : Person
{
public Child(string name, int age)
: base(name, age)
{
}
public override void Show()
{
Console.WriteLine("Child {0}, Age {1}", name, age);
}
}
public class Adult : Person
{
public Adult(string name, int age)
: base(name, age)
{
}
public override void Show()
{
Console.WriteLine("Adult {0}, Age {1}", name, age);
}
}
Voi scrie o clasa al carei rol este numai de a creea intanta potrivita, Child sau Adult, in functie de… parametrul varsta. Aceasta clasa ar trebui sa arate cam asa:
public class SimplePersonFactory { public static Person CreatePerson(string name, int age) { if (age < 0) throw new Exception ("Unborn"); if(age <= 18) return new Child(name, age); else return new Adult(name, age); } }
in metoda Main() voi scrie:
static void Main(string[] args)
{
Person[] persons = new Person[5];
persons[0] = SimplePersonFactory.CreatePerson("John", 25);
persons[1] = SimplePersonFactory.CreatePerson("Ion", 15);
persons[2] = SimplePersonFactory.CreatePerson("Yanosh", 35);
persons[3] = SimplePersonFactory.CreatePerson("Juan", 12);
persons[4] = SimplePersonFactory.CreatePerson("Ioana", 19);
foreach (Person p in persons)
p.Show();
}
Acest cod va afisa:
Adult John, Age 25
Child Ion, Age 15
Adult Yanosh, Age 35
Child Juan, Age 12
Adult Ioana, Age 19
Cu cat complexitatea luarii deciziei de a folosi o clasa sau alta creste cu atat se va vedea mai usor utilitatea acestui sablon simplu.