لطفا صبر کنید...
دیزاین پترن Flyweight




STRUCTURAL DESIGN PATTERNS

یکی از زیرشاخه های الگوهای طراحی، Structural Design Patterns است. این الگوها در مورد چگونگی ترکیب اشیاء و کلاس ها بایکدیگر صحبت میکند. به طور کلی استفاده از دیزاین پترن های برای راحتی و سهولت و همچنین سرعت بخشین به کد نویسی در نظر گرفته می شود.

Flyweight Design Pattern

دیزاین پترن Flyweight یکی از زیرشاخه های الگوهای طراحی از نوع Structural است.

الگوی طراحی Flyweight از اشتراک گذاری برای پشتیبانی موثر تعداد زیادی از اشیاء “دانه ریز” (fine-grained) استفاده می کند. منظور از fine-grained سیستم بزرگی است که از کامپوننت های زیاد و کوچک و مستقل تشکیل شده. در مقابل fine-grained ما coarse-grained را داریم که به معنی سیستمی است که از کامپوننت های بزرگ با تعداد کم ساخته شده.

میزان استفاده : کم

پیاده سازی دیزاین پترن Flyweight

فرض کنید سه کلاس دایره، مربع و مستطیل را داریم.

بنابراین موضوع ما ShapeEnum را به این شکل مینویسیم:

public enum ShapesEnum
    {
        RECTANGLE = 10,
        SQUARE = 20,
        CIRCLE = 30
    }

حالا کلاس ShapeFactory را بصورت زیر تعریف کنیم.

static class ShapeFactory
    {
        private static Dictionary<ShapesEnum, IShape> shapeHolder = new Dictionary<ShapesEnum, IShape>();

        public static IShape GetShape(ShapesEnum shape)
        {
            if (shapeHolder.Any(x => x.Key == shape))
                return shapeHolder.FirstOrDefault(x => x.Key == shape).Value;
            switch (shape)
            {
                case ShapesEnum.RECTANGLE:
                    var rectangle = new Rectangle();
                    shapeHolder.Add(shape, rectangle);
                    return rectangle;
                case ShapesEnum.SQUARE:
                    var square = new Square();
                    shapeHolder.Add(shape, square);
                    return square;
                case ShapesEnum.CIRCLE:
                    var circle = new Circle();
                    shapeHolder.Add(shape, circle);
                    return circle;
                default:
                    return null;
            }
        }
    }

همانطور که در کد بالا مشاهده میکنید، یک دیکشنری داریم با کلیدی از نوع ShapesEnum و مقداری از نوع IShape.

متدی داریم از نوع IShape و با ورودی ShapesEnum که برای ما objectای از نوع IShape بازمیگرداند، اما چطور؟

فرض کنید اولین بار است که من این متد را با مقدار ورودی ShapesEnum.Circle صدا زدیم.

از آنجایی که کلید دیکشنری ما از نوع ShapesEnum هست ما چک میکنیم که آیا بر اساس این کلید objectای در بخش مقدار این دیکشنری وجود دارد؟ اگر وجود داشت از متد برگردانده میشود.

اگر وجود نداشت بر اساس مقدار ورودی ابتدا ایجاد و سپس در این دیکشنری درج و بعد از آن بازگشت داده میشود.

حال به سراغ متد main میرویم.

static void Main(string[] args)
        {
            try
            {
                var circle = ShapeFactory.GetShape(ShapesEnum.CIRCLE);
                circle.Draw();

                var rectangle = ShapeFactory.GetShape(ShapesEnum.RECTANGLE);
                rectangle.Draw();

                var square = ShapeFactory.GetShape(ShapesEnum.SQUARE);
                square.Draw();

                var rectangle2 = ShapeFactory.GetShape(ShapesEnum.RECTANGLE);
                rectangle2.Draw();
            }
            catch (Exception ex)
            {
                ShowError(ex.Message);
            }
            Console.ReadLine();
        }

برای آموزش رایگان در مورد انواع دیزاین پترن ها و معماری های نرم افزار می توانید به این آموزش مراجعه نمایید:

معماری نرم افزار مهم ترین پترن های معماری نرم افزار

دیزاین پترن یا الگوی طراحی چیست؟

دیزاین پترن  در حقیقت راه حل مسائل طراحی نرم افزار هستند که بارها و بارها در دنیای توسعه نرم افزار تکرار میشوند. الگوهایی از طراحی قابل استفاده مجدد (reusable) و تعامل اشیاء.

هولوسن

با من یاد بگیر

آموزش های بیشتر در وبسایت هولوسن : https://holosen.net

نظرات
5.0
(0 نظر)
5
1
4
0
3
0
2
0
1
0
نظرات
**پرسش و پاسخ** سوال خود را مطرح کنید.
در کمتر از 10 دقیقه پاسخگوی شما هستیم

آدرس ایمیل شما منتشر نخواهد شد. فیلدهای الزامی علامت گذاری شده اند *

امتیاز:
Captcha Image