دیزاین پترن Flyweight از دسته ساختاری در مجموعه ۲۳ پترن مشهور Gang of Four است. وضعیت مشترک میان تعداد زیادی آبجکت را به اشتراک میگذارد تا مصرف حافظه کاهش یابد.
سناریوی واقعی در فروشگاه
هزاران ردیف سفارش میتوانند داده مشترک مشخصات SKU را به یک نمونه اطلاعات محصول ارجاع دهند.
نمونه در PHP
final class ProductMetadataPool {
private array $items = [];
public function get(string $sku): ProductMetadata {
return $this->items[$sku] ??= ProductMetadata::load($sku);
}
}
نمونه در پایتون
class ProductMetadataPool:
def __init__(self): self.cache = {}
def get(self, sku):
if sku not in self.cache:
self.cache[sku] = load_metadata(sku)
return self.cache[sku]
چه زمانی مناسب نیست؟
اطلاعات مشترک باید Immutable یا بهدقت کنترل شود، چون تغییر آن همه مصرفکنندگان را تحت تاثیر میگذارد.
برای شناخت جایگاه این پترن در سه دسته اصلی، دیزاین پترن را ببینید. مقاله دیزاین پترن باورژن و دوره آموزشی باورژن نیز منابع مرتبطاند.