معرفی الگوی طراحی Flyweight

معرفی الگوی طراحی Flyweight

مدت مطالعه : 3 دقیقه

10 اردیبهشت 1402

الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرم‌افزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفه‌جویی در زمان و تولید کد های با کیفیت، توسعه‌پذیر و انعطاف‌پذیر استفاده می‌کنیم. در این مطلب قصد داریم الگوی طراحی Flyweight را معرفی کنیم.

الگوی Flyweight یک الگوی طراحی ساختاری(structural) است که برای به حداقل رساندن استفاده از حافظه و بهبود عملکرد برنامه استفاده می‌شود. این الگو از طریق به اشتراک گذاری اشیاء با ویژگی های مشابه از مصرف حافظه اضافی جلوگیری می‌کند. قطعه کد های مختلف، در طول برنامه بجای ایجاد اشیاء جدید، از اشیاء ایجاد شده بصورت اشتراکی استفاده می‌کنند.

 

الگوی Flyweight از اجزای زیر تشکیل شده است:

  • Flyweight: رابطی را که flyweight ها یا همان اشیاء اشتراکی باید پیاده سازی کنند.
  • Concrete Flyweight: این کلاس رابط Flyweight را پیاده سازی می کند. اشیاء این کلاس همان اشیاء اشتراکی خواهند بود.
  • Flyweight Factory: اشیاء اشتراکی را ایجاد و مدیریت می کند و اطمینان حاصل می کند که اشیاء به درستی به اشتراک گذاشته می شوند.
flyweight pattern

در ادامه مثالی از الگوی Flyweight در C# آمده است:

// Flyweight interface
interface IShape
{
    void Draw(int x, int y);
}
// Concrete Flyweight
class Circle : IShape
{
    private int radius;
    public Circle(int radius)
    {
        this.radius = radius;
    }
    public void Draw(int x, int y)
    {
       Console.WriteLine("Drawing circle with radius {0} at ({1}, {2})", radius, x, y);
    }
}
// Flyweight Factory
class ShapeFactory
{
    private Dictionary<int, IShape> shapes = new Dictionary<int, IShape>();
    public IShape GetShape(int radius)
    {
        if (!shapes.ContainsKey(radius))
        {
           shapes.Add(radius, new Circle(radius));
        }
        return shapes[radius];
    }
}
// Client
class Client
{
    static void Main()
    {
        ShapeFactory factory = new ShapeFactory();
        IShape circle1 = factory.GetShape(5);
        circle1.Draw(1, 2);
        IShape circle2 = factory.GetShape(10);
        circle2.Draw(3, 4);
        IShape circle3 = factory.GetShape(5);
        circle3.Draw(5, 6);
    }
}

در مثال بالا، ما یک کلاس Circle داریم که رابط IShape را پیاده سازی می کند. کلاس ShapeFactory به عنوان یک Flyweight Factory عمل می کند که اشیاء Circle را بر اساس شعاع ایجاد و مدیریت می کند. در کد کلاینت سه دایره ایجاد می کنیم که دو دایره با شعاع های مختلف و یکی با شعاع دایره اول یکسان است. با استفاده مجدد از دایره اول، تعداد اشیایی که باید ایجاد شوند را کاهش می دهیم که باعث صرفه جویی در حافظه و بهبود عملکرد می شود.

الگوی Flyweight در سناریوهایی مفید است که در آن شما نیاز به ایجاد بسیاری از اشیاء با ویژگی های مشابه دارید. با استفاده از flyweights، می توانید استفاده از حافظه را به حداقل برسانید و با استفاده مجدد از اشیا، عملکرد برنامه را بهبود ببخشید.

برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همه‌ی الگو های طراحی می‌شود، برای شما قرار گرفته است.

design patterns

ایجاد کننده (Creational):الگوی طراحی Factory 
الگوی طراحی Builder 
الگوی طراحی Singleton 
الگوی طراحی Prototype 
الگوی طراحی Abstract Factory 
ساختاری (Structural):الگوی طراحی Adapter 
الگوی طراحی Bridge 
الگوی طراحی Composite 
الگوی طراحی Decorator 
الگوی طراحی Facade 
الگوی طراحی Flyweight 
الگوی طراحی Proxy 
رفتاری (Behavioral):الگوی طراحی Chain of Responsibility 
الگوی طراحی Command 
الگوی طراحی Interpreter 
الگوی طراحی Mediator 
الگوی طراحی Memento 
الگوی طراحی Observer 
الگوی طراحی State 
الگوی طراحی Strategy 
الگوی طراحی Template Method 
الگوی طراحی Visitor 
الگوی طراحی Iterator 
  • اشتراک گذاری:
محمدرضا باباخانی
محمدرضا باباخانی

من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که می‌نویسم بدردتون بخوره.

آخرین مطالب

سرویس مش؛ ساده سازی ارتباطات میکروسرویس و افزایش رؤیت پذیری

در چشم انداز همیشه در حال تحول توسعه نرم افزار، معماری میکروسرویس ها به دلیل مقیاس پذیری، انعطاف پذیری و توسعه پذیری محبوبیت قابل توجهی به دست آورده است. با این حال، با افزایش تعداد میکروسرویس ها در یک برنامه، مدیریت ارتباطات آنها و اطمینان از رؤیت صحیح همه آنها به طور فزاینده ای چالش برانگیز می شود. اینجاست که سرویس مش وارد عمل می شود.

اهمیت محاسبات لبه یا Edge Computing

ا توجه به سرعت تحول فناوری، یکی از مفاهیمی که توجه زیادی را به خود جلب کرده و نحوه تعامل ما با سیستم های دیجیتال را تغییر می دهد، محاسبات لبه (Edge Computing) است.

معماری رویداد محور چیست؟

معماری رویداد محور (EDA) یک الگوی طراحی نرم افزار است که در توسعه نرم افزار های مدرن به طور چشمگیری محبوب شده است. در این معماری، جریان داده ها با وقوع رویدادها تعیین می شود. بر خلاف سیستم های متمرکز سنتی که دائماً در حال بررسی وضعیت جدید هستند. معماری رویداد محور به ویژه برای سیستم هایی مفید است که به پردازش حجم زیادی از داده ها بصورت بلادرنگ(real-time) نیاز دارند.

ثبت دیدگاه