COMPOSITE PATTERN LÀ GÌ
Trong các bài trước bọn họ tìm hiểu về Adapter Pattern cùng Bridge Pattern rồi. Trong nội dung bài viết này họ tiếp tục mày mò 1 mẫu thi công khác là Composite Pattern với ngôn từ PHP. Đây cũng là một trong những mẫu xây cất trong nhóm chủng loại thiết kế cấu trúc – structuaral pattern
Composite Pattern là gì?
Mẫu kiến thiết Composite như đã nói là 1 trong mẫu xây dựng cấu trúc. Chủng loại này cho phép bạn phối kết hợp các đối tượng người dùng thành cấu trúc dạng cây và có tác dụng việc/tương tác với đối tượng này như thể một đối tượng người sử dụng riêng lẻ.
Bạn đang xem: Composite pattern là gì
Composite Pattern xử lý vụ việc gì?
Chú ý rằng mẫu thi công này chỉ có chức năng khi mô hình cốt lõi áp dụng của bạn có thể mô tả được bên dưới dạng cây.
Hãy tưởng tượng rằng bạn đang sẵn có 2 đối tượng: hộp đựng và sản phẩm (Box, Product). Hộp hoàn toàn có thể chứa 1 vài sản phẩm và 1 vài ba hộp nhỏ dại hơn. Trong những hộp nhỏ hơn đó lại chứa 1 vài ba sản phẩm, thậm chí là 1 trong vài vỏ hộp nho nhỏ tuổi khác nữa
Ví dụ này các bạn sẽ thực sự phát âm khi mua sắm chọn lựa trên trang TMĐT. Bạn đặt hàng đâu kia tầm 10 món đồ: Sách, năng lượng điện thoại, bàn chải tấn công răng, bút…
Thì bạn sẽ nhận được hộp lớn, vào đó sẽ sở hữu hóa đơn, những hộp nhỏ dại chứa đồ khác. Rồi tiếp nối hộp năng lượng điện thoại, trong số đó lại có hộp nho nhỏ tuổi nữa cất tai nghe.

Và bài xích toán đưa ra là yêu cầu kiểm tra lại chi phí từng món đồ 1. (Mặc định rằng mỗi mặt hàng đều có tem dán giá chỉ riêng). Các bạn sẽ phải mở toàn bộ các hộp này, từ hộp to mang lại hộp nhỏ, và cộng giá theo thứ tự lại.
Nghe chừng khôn xiết dễ, nhưng sẽ là trong thực tế. Còn trong bài toán lập trình, những đoạn mã chẳng thể hiểu được Hộp, thành phầm mà chúng cần duyệt qua nếu không định nghĩa. Và đương nhiên cũng chẳng thể rành mạch được những thứ kia giống khác nhau như cố kỉnh nào để tính tổng.
Composite Pattern xử lý vấn đề như vậy nào?
Composite Pattern có mặt để giải quyết và xử lý vấn đề bọn họ vừa nêu ra.
Theo Composite Pattern, chúng ta cần có 1 interface nhưng mà ở đó khai báo các hàm tác dụng dùng chung. Ví dụ trong trường vừa lòng này là tính mức giá (calcPrice). Sau đó các class Product cùng Box sẽ nên implement bao gồm interface này.
Đối với sản phẩm (Product), hàm này đơn giản dễ dàng là trả về giá thành phầm đó.
Còn đói với vỏ hộp (Box), hàm này vẫn là tổng những sản phẩm/hộp (product và các box) phía bên trong nó. (Mức giá bán này hoàn toàn có thể tính thêm một số ngân sách như phí đóng gói)
Điều này cực kỳ tuyệt vời, bởi vì khí những Box và Product phần nhiều implement 1 interface như nhau. Chúng ta không nên phân biệt đó là Product giỏi Box nhằm tính giá khác nhau. Mà dễ dàng hơn, rước giá của đối tượng người tiêu dùng hiện tại nhưng mà thôi.
Xem thêm: Sinh 2017 Mệnh Gì - Tổng Quan Tử Vi Năm 2017
Composite Pattern trong thực tế
Trong thực tế việc thống trị phân cấp theo phương thức cây này tồn tại không hề ít nơi.
Có thể kể tới như việc thống trị nhân sự trong 1 công ty lớn. Công ty chia theo từng chi nhánh, cơ sở, chống ban, tổ… Sau đó sau cùng mới là từng thành viên/nhân viên trong tổ đó.
Hoặc đối chọi giản đó là sơ đồ thống trị thư mục trong đồ vật tính. Một thư mục gồm thể có khá nhiều thư mục, tệp tin con. Vào thư mục con lại rất có thể chứa tiếp thư mục, tệp tin khác…. Cứ liên tiếp như vậy, thiệt rất cực nhọc để xác định khi nào là kết thúc. Nhưng bọn họ biết được rằng. Khối hệ thống đó chỉ cấu thành trường đoản cú 2 loại: 1 là Thư Mục, 2 là Tệp tin.
Cài để Composite Pattern vào PHP như vậy nào?

Một Composite Pattern sẽ bao gồm các phần thiết yếu như sau
+ Client: thay mặt đại diện cho class, hàm địa điểm mà sẽ làm việc trực tiếp cùng với các đối tượng người sử dụng trong Composite
+ Component: Đây là Interface định nghĩa là phương thức chung cho các đối tượng người dùng tham gia vào mẫu xây đắp này
+ Leaf: là solo vị nhỏ tuổi nhất trong Composite, bên cạnh đó cũng là 1 trong thể hiện nay của Component
+ Composite: là một thể hiện tại của Component, trong Composite chứa nhiều đơn vị nhỏ hơn là Leaf
Ví dụ Composite Pattern trong PHP
Chúng ta đang tiến hành thiết lập Composite Pattern mang đến ví dụ quản lý thư mục bên trên.
Nhiệm vụ của chúng ta sẽ bắt buộc tính tổng form size của folder tổng đó. Ta có lược vật dụng như sau

Trong này ta vẫn có
Leaf: tương ứng với các File
Composite: tương ứng với các folder
Đoạn mã tương xứng như sau
name = $name; $this->size = $size; } public function showProperties():void printf("Tên: %s,Kích cỡ: %s".PHP_EOL,$this->name,$this->size); public function totalSize():int return $this->size; }class thư mục implements Component protected $files = <>; public function __construct(array $files) $this->files = $files; public function showProperties():void foreach($this->files as $file) $file->showProperties(); public function totalSize():int $total =0; foreach($this->files as $file) $total += $file->totalSize(); return $total; $file1 = new File("File 1",10);$file2 = new File("File 2",20);$file3 = new File("File 3",30);$files = <$file1,$file2,$file3>;$folder = new Folder($files);$folder->showProperties();echo $folder->totalSize();Kết quả
Tên: file 1,Kích cỡ: 10Tên: file 2,Kích cỡ: 20Tên: tệp tin 3,Kích cỡ: 3060
Ưu điểm và nhược điểm của Composite Pattern
+ Kết hợp với đa hình và đệ quy, chúng ta cũng có thể dễ dàng thao tác làm việc với cấu tạo cây phức tạp.+ chúng ta cũng có thể thêm mới các class, đối tượng người dùng mới vào cây hệ thống mà ko phá vỡ cấu tạo hiện bao gồm của nó, điều này vừa lòng với phép tắc đóng mở trong nguyên lý SOLID
Nhược điểm là, việc tạo nên 1 interface áp dụng chung chưa hẳn điều dễ ợt gì. Trong một số trường phù hợp thì con số hàm xử trí trong interface sẽ rất nhiều. Vô hình dung chung việc này khiến cho ứng dụng của doanh nghiệp trở đề nghị khó hiểu hơn.
Sử dụng Composite Pattern lúc nào?
+ Composite Pattern chỉ nên được áp dụng khi nhóm đối tượng người dùng phải vận động như một đối tượng người dùng duy duy nhất (theo cùng một cách).+ Composite Pattern hoàn toàn có thể được áp dụng để tạo nên một kết cấu giống như kết cấu cây.
Xem thêm: Tiếng Việt Lớp 4 Trang 53 Sgk Tiếng Việt 4 Tập 1, Soạn Câu 1 Trang 53
Bạn gồm thể tham khảo thêm 1 số pattern khác như Adapter Pattern và Bridge Pattern trong PHP
Hi vọng với bài viết Composite Pattern trong PHP này đang giúp các bạn hiểu rõ rộng về mẫu kiến tạo này cũng tương tự ứng dụng chúng vào các câu hỏi thực tế 1 cách hiệu quả. Nếu thấy bài viết bổ ích, đừng tiếc 1 lượt thích cho bầy mình, và mô tả để mọi người cùng cơ mà hoàn thiện kiến thức bạn nhé.