Saturday, September 8, 2018

Composite Pattern

Design Pattern-ები არის ერთ-ერთი ყველაზე პოპულარული თემა ბლოგებზე და ასევე ინტერვიუების დროს. ამ პოსტში განვიხილავთ Composite Pattern-ს ერთ-ერთ მაგალითზე. ერთადერთი რაც უნდა დავიმახსოვროთ არის ის, რომ Composite Pattern-ი გამოიყენება რეკურსიული მოქმედების განსახორციელებლად ხისებურ სტრუქტურაზე.


განვიხილოთ სასტუმროს მაგალითი, რომელსაც არ აქვს შუქის ცენტრალური ჩამრთველი და გამომრთველი და იმისთვის რომ ეს ოპერაცია განვახორციელოთ, საჭიროა ყოველი სართულის ყოველ ოთახში ჩავრთოთ/გამოვრთოთ შუქი. ასეთი სასტუმროს სისტემის მოდელირებისთვის შევქმნათ ინტერფეისი Component (სახელის კონვენცია რომ დავიცვათ) და აღვწეროთ ორი მეთოდი.

ამის შემდეგ გვჭირდება Building, Floor და Room კლასები შესაბამისად, რომელებიც თითოეული იმპლემენტაციას გაუკეთებს Component ინტერფეისს.

  • Building-ში შუქი ჩართულად/გამორთულად ითვლება თუ მის ყველა სართულზე არის ჩართული/გამორთული.
  • Floor-ზე შუქი ჩართულად/გამორთულად ითვლება თუ მის ყველა ოთახში არის ჩართული/გამორთული.
  • Room-ში შუქი ჩართულად/გამორთულად ითვლება თუ შიგნით არის ჩართული/გამორთული.



Building ახორციელებს მისი ყველა სართულისთვის შუქის ჩართვის/გამორთვის ოპერაციას, ხოლო Floor შესაბამისად ახორციელებს იმავე ოპერაციას თავისი ყველა ოთახისთვის.

საბოლოო ეფექტი ის არის, რომ ძირითად ოპერაციას იწყებს Building, რომელიც რეკურსიულად ხორციელდება მის ქვემოთ არსებულ ობიექტებზე (Floor და Room). "დომინოს ეფექტი" არის ერთ-ერთი თვისება Composite Pattern-თვის.

აქვე აღვნიშნოთ რომ default-ად ყველა ოთახში შუქი გამორთულია. ახლა ვნახოთ ტესტ კლასი და შევამოწმოთ რომ ჩვენი სტრუქტურა სწორად მუშაობს.


No comments:

Post a Comment