ประยุกต์การสร้าง object ตอนรันไทม์กับ polymorphism (2010-03-17)
จากหัวข้อที่แล้วบางท่านอาจจะมองไม่ออกว่าจะเอาไปใช้งานอย่างไรได้ ผมก็มีตัวอย่างการประยุกต์ใช้ได้อย่างหนึ่ง (ที่คิดออกตอนนี้)
นั่นก็คือนำไปใช้กับ Class ต่างๆ ที่มีคุณสมบัติ polymorphism เพื่อไม่ให้ขาดตอน ลุยกันเลยครับ
class Animal
{
public virtual String Say()
{
return "FooFooooooooooooo";
}//
}//
class Dog : Animal
{
public override string Say()
{
return "Hong Hong";
}
}//
class Cat : Animal
{
public override string Say()
{
return "Maew Maew";
}
}//
class ObjectFactory
{
public object GetObject(String objName)
{
Assembly assembly = Assembly.GetExecutingAssembly();
AssemblyName assemblyName = assembly.GetName();
Type objType = assembly.GetType(assemblyName.Name + "."+objName);
return Activator.CreateInstance(objType);
}//
}//
class AnimalFactory
{
public Animal BuildAnimal(String animalType)
{
return (Animal)new ObjectFactory().GetObject(animalType);
}//
}// |
วิธีการเรียกใช้ก็ดังตัวอย่างข้างล่างนี้ครับ
|
Animal animal = new AnimalFactory().BuildAnimal("Dog");
MessageBox.Show(animal .Say());
animal = new AnimalFactory().BuildAnimal("Cat");
MessageBox.Show(animal .Say());
|
ว้าว เยี่ยมไปเลย นำไปประยุกต์ใช้กันนะครับ นี่ผมก็มีโครงการว่าจะทำ Active Record ด้วย C# (เลียนแบบ Ruby) แต่อาจจะ
เป็นตัวเล็กๆ คงมีโอกาสได้ใช้ก็โอกาสนี้ เพราะว่า object ต่างๆ มีความสัมพันธ์กันแบบ ไดนามิก ได้ตลอดเวลา ไว้ทำถึงไหนแล้วจะ
มาอัพเดทข่าวให้ฟังนะครับ คอยติดตามและเป็นกำลังใจให้กันนะครับ
ปล. แอบน้อยใจนิดนึงว่า มีคนเข้ามาดูบ้างหรือปล่า ไม่เห็นมี Comment บ้างเลยครับ
|