Tìm hiểu Prototype Design Pattern với ví dụ sử dụng ngôn ngữ C#
Đăng lúc: 08:50 AM - 14/11/2022 bởi Charles Chung - 730Prototype là một mẫu thuộc nhóm Creational Pattern, nó được sử dụng để tạo ra object từ 1 object nguyên mẫu, bằng cách copy các thuộc tính của object đó, mẫu này được sử dụng thường xuyên.
Các thành phần trong prototype pattern
Trong đó
- Prototype: Khai báo interface cho phép clone bản thân nó
- ConcretePrototype: Implements method từ interface để clone chính nó
- Client: Tạo ra object mới bằng cách gọi prototype để clone nó
Ví dụ demo trong C#
Tệp IStaff.cs
namespace Example01
{
/// <summary>
/// Giao diện IStaff (prototype)
/// </summary>
public interface IStaff
{
IStaff Clone();
string GetDetails();
}
}
Tệp Developer.cs
namespace Example01
{
/// <summary>
/// Lớp Developer (ConcretePrototype)
/// </summary>
public class Developer : IStaff
{
public int WordsPerMinute { get; set; }
public string Name { get; set; }
public string Role { get; set; }
public string PreferredLanguage { get; set; }
public IStaff Clone()
{
// Shallow Copy: only top-level objects are duplicated
return (IStaff)MemberwiseClone();
// Deep Copy: all objects are duplicated
//return (IStaff)this.Clone();
}
public string GetDetails()
{
return string.Format("{0} - {1} - {2}", Name, Role, PreferredLanguage);
}
}
}
Tệp Typist.cs
namespace Example01
{
/// <summary>
/// Lớp Typist (ConcretePrototype)
/// </summary>
public class Typist: IStaff
{
public int WordsPerMinute { get; set; }
public string Name { get; set; }
public string Role { get; set; }
public IStaff Clone()
{
// Shallow Copy: only top-level objects are duplicated
return (IStaff)MemberwiseClone();
// Deep Copy: all objects are duplicated
//return (IStaff)this.Clone();
}
public string GetDetails()
{
return string.Format("{0} - {1} - {2}wpm", Name, Role, WordsPerMinute);
}
}
}
Tệp Program.cs
namespace Example01
{
/// <summary>
/// Lớp Program (Client)
/// </summary>
class Program
{
static void Main(string[] args)
{
Developer dev = new Developer();
dev.Name = "Rahul";
dev.Role = "Team Leader";
dev.PreferredLanguage = "C#";
Developer devCopy = (Developer)dev.Clone();
devCopy.Name = "Arif"; //Not mention Role and PreferredLanguage, it will copy above
Console.WriteLine(dev.GetDetails());
Console.WriteLine(devCopy.GetDetails());
Typist typist = new Typist();
typist.Name = "Monu";
typist.Role = "Typist";
typist.WordsPerMinute = 120;
Typist typistCopy = (Typist)typist.Clone();
typistCopy.Name = "Sahil";
typistCopy.WordsPerMinute = 115;//Not mention Role, it will copy above
Console.WriteLine(typist.GetDetails());
Console.WriteLine(typistCopy.GetDetails());
Console.ReadKey();
}
}
}
Link tải source code demo (Google Drive)
thay lời cảm ơn!
Các bài cũ hơn
- 10 lý do các doanh nghiệp nên chọn ASP.NET Core để phát triển ứng dụng Web (03:50 PM - 10/11/2022)
- Tìm hiểu Builder Design Pattern với ví dụ sử dụng ngôn ngữ C# (11:44 AM - 09/11/2022)
- Truy xuất dữ liệu trong ASP.NET Core 2.1 sử dụng Entity Framework Core(Code First) (05:12 PM - 08/11/2022)
- Tìm hiểu Abstract Factory Design Pattern với ví dụ sử dụng ngôn ngữ C# (08:50 AM - 08/11/2022)
- Authorization và Authentication sử dụng Cookie trong ASP.NET Core (10:50 AM - 07/11/2022)