الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرمافزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفهجویی در زمان و تولید کد های با کیفیت، توسعهپذیر و انعطافپذیر استفاده میکنیم. در این مطلب قصد داریم الگوی طراحی Flyweight را معرفی کنیم.
الگوی Flyweight یک الگوی طراحی ساختاری(structural) است که برای به حداقل رساندن استفاده از حافظه و بهبود عملکرد برنامه استفاده میشود. این الگو از طریق به اشتراک گذاری اشیاء با ویژگی های مشابه از مصرف حافظه اضافی جلوگیری میکند. قطعه کد های مختلف، در طول برنامه بجای ایجاد اشیاء جدید، از اشیاء ایجاد شده بصورت اشتراکی استفاده میکنند.
الگوی Flyweight از اجزای زیر تشکیل شده است:
در ادامه مثالی از الگوی 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، می توانید استفاده از حافظه را به حداقل برسانید و با استفاده مجدد از اشیا، عملکرد برنامه را بهبود ببخشید.
برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همهی الگو های طراحی میشود، برای شما قرار گرفته است.
من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که مینویسم بدردتون بخوره.
ثبت دیدگاه