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

درک الگوی وزن Flyweight

الگوی وزن Fly یک الگوی طراحی ساختاری است که برنامه ها را قادر می سازد تا از تعداد زیادی از اشیاء به طور موثر با به اشتراک گذاری داده های رایج حمایت کنند، به جای ایجاد یک شی جدید برای هر واحد، الگو از اشیاء موجود با حالت ذاتی مشترک استفاده می کند.

کاربرد در Graphics

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

اجرای الگو

  • دولت Intrinsic را تأیید کنید: مشخص کنید که کدام ویژگی ها در میان اشیاء مانند رنگ یا سبک فونت به اشتراک گذاشته می شوند.
  • (فَلَّهُمَهُمَهُمَهُمَهُوا مَنَّاِنَهُمَهُمَهُوا مَنَّا مَنَّهُمَا مَنَّا مَهُمْهُمَا مَهُمَهُمَهُمَهُمَهُوا مَهُمَهُمْهُوا مَهُوا مَهُمْهُمْهُوا مَهُمْهُمْهُمَهُمَهُمْهُمْهُمْهُوَهُوَهُوَهُمْهُمَهُوا مَهُمَهُوا مَهُمَهُمَهُمَهُمَا مَهُوَهُمَهُمَهُوَهُوَهُوَهُوَهُوَهُوَهُوَهُوَهُمَ
  • دولت خارجی انسان: خواصی را که بین اشیاء خارج از اشیاء وزن متغیر است، نگه دارید، آنها را به عنوان پارامترهای زمانی که نیاز است.
  • استفاده از یک کارخانه: پیاده سازی یک کلاس کارخانه برای مدیریت اشیاء وزن Fly و اطمینان از استفاده مجدد.

مثال در Code

فرض کنید یک برنامه طراحی با هزاران دایره دارید، به جای ایجاد یک شی جدید برای هر دایره، می توانید ویژگی های رنگ و سبک را به اشتراک بگذارید.

در اینجا یک مثال ساده است:

class Circle {
 constructor(x, y, radius, style) {
 this.x = x;
 this.y = y;
 this.radius = radius;
 this.style = style; // shared object
 }
}

class Style {
 constructor(color, strokeWidth) {
 this.color = color;
 this.strokeWidth = strokeWidth;
 }
}

class StyleFactory {
 constructor() {
 this.styles = {};
 }

 getStyle(color, strokeWidth) {
 const key = color + strokeWidth;
 if (!this.styles[key]) {
 this.styles[key] = new Style(color, strokeWidth);
 }
 return this.styles[key];
 }
}

// Usage
const styleFactory = new StyleFactory();
const circles = [];

for (let i = 0; i < 1000; i++) {
 const style = styleFactory.getStyle('red', 2);
 circles.push(new Circle(i, i, 10, style));
}

مزایای الگوی وزن Flyweight

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

نتیجه گیری

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