أنماط التصميم في C# مع أمثلة كود

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

أنماط التصميم في C#: دليل كامل مع أمثلة



أنماط التصميم (Design Patterns) هي حلول مثبتة للمشكلات النمطية التي تنشأ أثناء تطوير البرمجيات. في نظام .NET و C#، تعتبر معرفة الأنماط مهمة بشكل خاص، حيث أن العديد منها مدمج مباشرة في المنصة (مثل IDisposable لنمط Dispose). في هذه المقالة، سنشرح المجموعات الثلاث الرئيسية للأنماط وفقًا لتصنيف GoF (Gang of Four) مع أمثلة عملية بلغة C#.



أنماط الإنشاء (Creational Patterns)



أنماط الإنشاء مسؤولة عن إنشاء الكائنات، مما يجعل النظام مستقلاً عن طريقة إنشائها وتكوينها وتمثيلها.



Singleton (المفرد)



يضمن وجود مثيل واحد فقط للفئة، ويوفر نقطة وصول عالمية إليه. في C#، يُستخدم غالبًا للعمل مع مسجلات الأحداث (loggers) أو ذاكرة التخزين المؤقت (cache) أو الإعدادات (configuration).



public sealed class Logger{    private static readonly Lazy<Logger> _instance =         new Lazy<Logger>(() => new Logger());

public static Logger Instance => _instance.Value;

private Logger() { }

public void Log(string message) { Console.WriteLine($"[{DateTime.Now}] {message}"); }}

// الاستخدامLogger.Instance.Log("تم تشغيل التطبيق");


Factory Method (طريقة المصنع)



يحدد واجهة لإنشاء كائن، لكنه يسمح للفئات الفرعية بتغيير نوع الكائن الذي يتم إنشاؤه. مناسب تمامًا للمنطق الذي يجب أن يكون قابلاً للتوسيع.



public interface ITransport{    void Deliver();}

public class Truck : ITransport{ public void Deliver() => Console.WriteLine("التوصيل عبر الطريق");}

public class Ship : ITransport{ public void Deliver() => Console.WriteLine("التوصيل عبر البحر");}

public abstract class Logistics{ public abstract ITransport CreateTransport();

public void PlanDelivery() { var transport = CreateTransport(); transport.Deliver(); }}

public class RoadLogistics : Logistics{ public override ITransport CreateTransport() => new Truck();}

public class SeaLogistics : Logistics{ public override ITransport CreateTransport() => new Ship();}

// الاستخدامLogistics logistics = new RoadLogistics();logistics.PlanDelivery(); // التوصيل عبر الطريق


الأنماط الهيكلية (Structural Patterns)



تحدد الأنماط الهيكلية طرق بناء الفئات والكائنات لتشكيل هياكل أكبر.



Adapter (المهايئ)



يحول واجهة فئة إلى واجهة أخرى يتوقعها العميل. يُستخدم غالبًا للتكامل مع المكتبات الخارجية أو الكود القديم.



// الواجهة المستهدفة (ITarget)public interface IXmlParser{    string ParseToXml(string data);}

// الفئة القابلة للتكييف (Adaptee)public class JsonParser{ public string ParseToJson(string data) { return $"{{\\"data\\": \\"{data}\\"}}"; }}

// المهايئpublic class JsonToXmlAdapter : IXmlParser{ private readonly JsonParser _jsonParser;

public JsonToXmlAdapter(JsonParser jsonParser) { _jsonParser = jsonParser; }

public string ParseToXml(string data) { var json = _jsonParser.ParseToJson(data); // تحويل بسيط من JSON إلى XML return $"<data>{data}</data>"; }}

// الاستخدامvar adapter = new JsonToXmlAdapter(new JsonParser());string xml = adapter.ParseToXml("Hello");Console.WriteLine(xml); // <data>Hello</data>


Decorator (المزخرف)



يضيف ديناميكيًا مسؤوليات جديدة إلى الكائن. في C#، غالبًا ما يتم تنفيذ هذا النمط من خلال الوراثة أو التركيب.



public interface INotifier{    void Send(string message);}

public class E

المدونات

توصيات الكتب