دیزاین پترن Composite از دسته ساختاری در مجموعه ۲۳ پترن مشهور Gang of Four است. آبجکت منفرد و مجموعهای از آبجکتها را با یک قرارداد مشترک مدیریت میکند.
سناریوی واقعی در فروشگاه
دستهبندی محصولات میتواند زیردسته داشته باشد و محاسبه تعداد محصولات هر گره بهصورت بازگشتی انجام شود.
نمونه در PHP
interface CategoryNode { public function countProducts(): int; }
final class CategoryGroup implements CategoryNode {
public function __construct(private array $children) {}
public function countProducts(): int {
return array_sum(array_map(fn ($node) => $node->countProducts(), $this->children));
}
}
نمونه در پایتون
class CategoryGroup:
def __init__(self, children): self.children = children
def count_products(self):
return sum(child.count_products() for child in self.children)
چه زمانی مناسب نیست؟
هنگام پیمایش ساختار درختی باید چرخههای احتمالی و هزینه Queryهای تکراری کنترل شوند.
برای شناخت جایگاه این پترن در سه دسته اصلی، دیزاین پترن را ببینید. مقاله دیزاین پترن باورژن و دوره آموزشی باورژن نیز منابع مرتبطاند.