Factory Design Pattern C#


Đây là mẫu thiết kế thuộc nhóm creational, cung cấp một giao diện để tạo các đối tượng mà không cần chỉ định lớp cụ thể của đối tượng, điều này hữu ích khi bạn muốn độc lập giữa code tạo và code sử dụng đối tượng
Ví dụ
Đầu tiên tạo một Interface IAnimal gồm 1 Property và 2 Method

 public interface IAnimal
 {
     int Id { get; }
     string GetName();
     string MakeSound();
 }

Sau đó tạo hai lớp kế thừa Interface phía trên

public class Dog : IAnimal
{
    int IAnimal.Id => 1;

    public string GetName() => "Lucy Dog";

    public string MakeSound() => "Woof Woof";
}
public class Cat : IAnimal
{
    public int Id => 2;
    public string GetName() => "Peter Cat";
    public string MakeSound() => "Meow Meow";
}

Tiếp theo tạo một lớp AnimalFactory cung cấp một phương thức tĩnh để tạo các đối tượng theo ngữ cảnh cụ thể

 public class AnimalFactory
 {
     public static IAnimal? GetAnimal(string AnimalType)
     {
         IAnimal? animal = null; // tạo biến để return đối tượng
         switch (AnimalType)
         {
             case "dog":
                 animal = new Dog(); 
                 break;
             case "cat":
                 animal = new Cat();
                 break;
             default:
                 break;
         }
         return animal;
     }
 }

Tiếp theo là code để sử dụng các đối tượng. Lúc này kiểu tạo var có kiểu chính xác là IAnimal, rõ ràng không có kiểu cụ thể của lớp Dog hay Cat

 //Create Dog
 var dog = AnimalFactory.GetAnimal("dog");
 Console.WriteLine("Id: " + dog?.Id);
 Console.WriteLine("Name: " + dog?.GetName());
 Console.WriteLine("Sound: " + dog?.MakeSound());

 // Create Cat
 var cat = AnimalFactory.GetAnimal("cat");
 Console.WriteLine("Id: " + dog?.Id);
 Console.WriteLine("Name: " + cat?.GetName());
 Console.WriteLine("Sound: " + cat?.MakeSound());
 

Post a Comment

Previous Post Next Post