ერთ-ერთი ცნობილი მაღაზია Starbuzz Coffee ყიდის განსხვავებული სახის სასმელებს. თითოეული სასმელის ღრებულება გამოითვლება განსხვავებულად. სასმელები, რომლების Starbuzz-ში იყიდება არის : HouseBlend, DarkRoast, Decaf და Espresso. Starbuzz-ს სჭირდება სისტემა, რომელიც სასმელის შეკვეთსას გამოთვლის სასმელის ფასს. დავხატოთ კლასების დიაგრამა სისტემისთვის :
დამატებით, სტანდარტული ყავისთვის შეიძლება მომხმარებელმა შეუკვეთოს ყავა გარკვეული ინგრედიენტების დამატებით (მაგ.: რძიანი, მეტი შაქრით, სოიოთი და ა.შ.) .თუ ჩვენ ინგრედიენტებიან ყავებს ცალკე ობიექტებად გავაკეთებთ მოგვიწევს კლასების რაოდენობის მინიმუმ გაორმაგება, ან BEVERAGE კლასში Boolean-ი ველის დამატება თითოეული ინგრედიენტისთვის, რაც კონკრეტული შეკვეთის ფასის გამოთვლისთვის მოითხოვს იმდენი if პირობის დაწერას, რამდენი ინგედიენტიც გვექნება. ამ შემთხვევაში დიაგრამა მიიღებს შემდეგ სახეს :
სწორედ მსგავის შემთხვევის დროს, ბევრი კოდის წერის თავის აცილების მიზნით, შემოიღეს Decorator Pattern-ი, რომლის მიხედვითაც ჩვენი კოდი უნდა იძლეოდეს საშუალებას :
- ფუნქციონალობის დამატების და არა არსებული კოდის შეცვლის.
- კლასები უნდა იყოს ხელმისაწვდომი გადართოებისთვის, მაგრამ დახურული უნდა იყოს მოდიფიკაციისთვის.
მაგალითად მოგვივიდა შეკვეთა DarkRoast with Mocha and Whip .
შეკვეთის მომზადება დავიწყოთ DarkRoast ობიექტის შექმნით
ახლა უკვე ვნახოთ ზემოაღნიშნულის პროგრამული კოდი და დავტესტოთ ერთ კონკრეტულ მაგალითზე.
სატესტოდ შევქმნათ ორი სახეობის ყავა , ესპრესო და House Blend-ი.
ახლა ვნახოთ ის, თუ რა გამოიტანა პროგრამამ კონსოლში
თუ რაიმე კითხვა გაგიჩნდებათ დაწერეთ კომენტარის სახით და გიპასუხებთ 🙂