بحث هذه المدونة الإلكترونية

الأحد، 27 يونيو 2010

Singleton Pattern

Singleton Pattern

الغرض من هذا النوذج هو التاكد من عدم عمل اكثر من نسخة من نفس الكلاس والتاكد ايضا من نقطة دخول رئيسية وعامة للاوبجيكت والمثال الاوضح لذلك هي ايقونة عمل البرامج حيث ان بعض البرامج لا تسمح بتشغيل اكثر من نسخة في ان واحد .
مثال:
public sealed class Singleton
{
    // Private Constructor
    Singleton() { }

    // Private object instantiated with private constructor
    static readonly Singleton instance = new Singleton();

    // Public static property to get the object
    public static Singleton UniqueInstance
    {
        get { return instance; }
    }
}

السبت، 19 يونيو 2010

Creational Patterns - Prototype Pattern

Creational Patterns: Prototype, Factory Method, and Singleton

الانماط الانشئية : وهي انماط تهدف الى فصل النظام عن كيفية انشاء وخلق ال Objects المكونة له فهي تزيد من مرونة النظام

Prototype Pattern

هذا النمط ينشئ الكائنات Objects الجديدة عن طريق الوراثة من prototypes مخزنة من قبل وميزة هذه ال prototypes انها تقوم بتسريع عملية الإنشاء.

IPrototype: تعريف الإنترفيس الذي يورث منه  لنسخ ال prototypes
Prototype: الكلاس التي تحوي امكانية النسخ
PrototypeManager: يحفظ بها قائمة بانواع  النسخ ومفاتيحها
Client: اضافة prototypes للقائمة وطلبات النسخ

اولا نوضح معنى كلمة النسخ لل objects : النسخ ثلاثة انواع
الطريقة الاولى : اما ان نصنع 2 refrences لمحتوى واحد في الذاكرة
مثال:
Car car1= new Car();
Car car2= car1;
هذه اول طرق النسخ وهي طريقة سطحية اذا قمت بتغيير اي شئ في car1  سوف تتغير في car2
مثلا اذا قلنا
car1.name=”BMW”;
الان لو قمنا بطباعة car2.name سنجدها = BMW

الأربعاء، 9 يونيو 2010

Adapter Pattern

Adapter Pattern
هذا النمط عبارة عن محول يقوم بعمل interface لنظام معقد ربما يكون كود جاهزمثلا او احدى المكتبات(libraries) القديمة لديك وتريد ان تعيد استخدامها ولكن ال interface  لهذا الكود او المكتبة غير متوافق مع الكود الجديد الذي تستخدم معه هذه المكتبة فنقوم بعمل محول يوافق بين الجزئيتين
ITarget :
هو الانترفيس المراد استخدامه من المستخدم النهائي للكود او المستخدم لل(Adaptee)
Adaptee :
هو الكود او المكتبة والمراد استخدام محتواها
Adapter :
هي الكلاس التي تورث من ITarget وتوافق شروط ال Adaptee
Request:
هو الطلب الذي نريد تنفيذه في النهاية
SpecificRequest :
المحتوى الذي نريد تنفيذه والموجود في ال Adaptee
نستعرض مثال بسيط لتوضيح الفكرة

الاثنين، 7 يونيو 2010

Flyweight Pattern

Flyweight Pattern
هذا النمط يفيد في بعض الحالات التي نستخدم فيها objects صغيرة وكثيرة فتستهلك كثيرا من ال resources ويكون من المفضل وقتها ان نجمع كل هذه الكائنات الصغيرة في كائن واحد كبير او اقل عدد ممكن من الكائنات الكبيرة نوعا ما هو اوفر على النظام من كائنات كثيرة صغيرة
-         هذا النمط يقوم على تقسيم الكائنات الى intrinsic data و extrinsic data والجزء الاول يكون للوظائف الداخليه للكلاس ولا يمكن فصلها عن الكائن اما الجزء الثاني فهي الوظائف التي من الممكن ان تفصلها عن الكلاس وتخزن خارجه وبذلك يمكننا ان نستبدل جميع الاجزاء المتشابهه في الجزء الداخلي واستبدالها بكائن واحد
وهناك جزء اخر يدير عملية التاكد من عدم وجود الكائن قبل انشائه اي يتاكد اننا لم ننشأ intrinsic data مطابقة من قبل وفي حالة اننا انشئناها من قبل يقوم باستخدامها في انشاء الاوبجيكت الجديد بدلا من انشاء intrinsic data جديدة

الثلاثاء، 1 يونيو 2010

Composite Pattern







Composite Pattern

هذا النمط بالرغم من تعقيد اسمه الا انه نمط بسيط جدا. يستخدم هذا النمط لاجراء عملية ما على مجموعة كبيرة من العناصر بدون معرفة عددها فمهما كان العدد ستستمر الباترن في تنفيذ العملية الى انتهاء العدد .

وتتكون تلك العناصر من صنفين الاول يكون حاوية ويحتوي على عناصر اما من نفس نوعه او من نوع قابل للتشغيل.


نمط ال composite
يتكون من عنصرين هما ال
Composites و ال Component وكلاهما يكون مشتق من نفس ال interface وفي معظم الاوقات التعامل مع ال Composites يكون غرضه هو كيفية الوصول لل Component.

مثال بسيط: المقلب القديم الذي تحضر فيه هدية لاحد الاشخاص عبارة عن صندوق وبداخله صندوقين اخرين وكل صندوق من الصناديق داخلها صندوقين اخرين وهكذا الى ان تصل الى اخر الصناديق ويكون بها شئ
تستطيع ان تستخدمه استخدام اخر بخلاف ان تقوم بفتحه لتبحث فيه

هذا بالظبط مفهوم ال composite pattern.
مثال عملي:

الأربعاء، 26 مايو 2010

Bridge Pattern


Bridge Pattern

هذا النمط يقوم على فصل كيفية بداية عمل الاوبجيكت  و المحتوى او الناتج النهائي فهو يفصل بين ال (abstraction ) و (implementation  ) . وهذا يفيد في البرامج التي يكون لها تحديثات فجزء منها ثابت وهو الموضوع به ال abstraction   وهو الذي يقوم باستدعاء دالة معينة في الجزء الاخر و هو ال implementaion فتظهر النتائج دون تدخل من الجزء الاول

دعنا نبدا بمثال صغير لكي تتضح الفكرة:

الثلاثاء، 25 مايو 2010

Proxy Pattern



Proxy Pattern

-        هذاالنمط يدعم العناصر التي تتحكم في انشاء عناصر اخرى او الوصول اليها وغالبا ما يكون ال proxy كائن صغير و Public  و يمثل او يكون بديل الى كائن اخر معقد وprivate
 
فهذا النمط عبارة عن ال class التي تقوم بانشاء اوالتحكم او تسهيل اوحماية الولوج لعنصر آخر ويكون للبروكسي والكائن الاخر نفس الانترفيس

مثال : 

class SubjectAccessor
    {
        public interface ISubject

        {
            string Request();
        }

        private class Subject:ISubject

        {

            public string Request()

            {
                return "Subject Request " + "Choose left door\n";
            }
        } 

        public class Proxy : ISubject
        {
            Subject subject; 

            public string Request()
            {
                // A virtual proxy creates the object only on its first method call

                if (subject == null)

                {
                    Console.WriteLine("Subject inactive");
                    subject = new Subject();
                }

                Console.WriteLine("Subject active");
                return "Proxy: Call to " + subject.Request();
            }
        }