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.