JAVA DECORATOR PATTERN

ერთ-ერთი ცნობილი მაღაზია Starbuzz Coffee ყიდის განსხვავებული სახის სასმელებს. თითოეული სასმელის ღრებულება გამოითვლება განსხვავებულად. სასმელები, რომლების Starbuzz-ში იყიდება არის : HouseBlend, DarkRoast, Decaf და Espresso. Starbuzz-ს სჭირდება სისტემა, რომელიც სასმელის შეკვეთსას გამოთვლის სასმელის ფასს. დავხატოთ კლასების დიაგრამა სისტემისთვის :

1

დამატებით, სტანდარტული ყავისთვის შეიძლება მომხმარებელმა შეუკვეთოს ყავა გარკვეული ინგრედიენტების დამატებით (მაგ.: რძიანი, მეტი შაქრით, სოიოთი და ა.შ.) .თუ ჩვენ ინგრედიენტებიან ყავებს ცალკე ობიექტებად გავაკეთებთ მოგვიწევს კლასების რაოდენობის მინიმუმ გაორმაგება, ან BEVERAGE კლასში Boolean-ი ველის დამატება თითოეული ინგრედიენტისთვის, რაც კონკრეტული შეკვეთის ფასის გამოთვლისთვის მოითხოვს იმდენი if პირობის დაწერას, რამდენი ინგედიენტიც გვექნება. ამ შემთხვევაში დიაგრამა მიიღებს შემდეგ სახეს :

2

სწორედ მსგავის შემთხვევის დროს, ბევრი კოდის წერის თავის აცილების მიზნით, შემოიღეს Decorator Pattern-ი, რომლის მიხედვითაც ჩვენი კოდი უნდა იძლეოდეს საშუალებას :

  • ფუნქციონალობის დამატების და არა არსებული კოდის შეცვლის.
  • კლასები უნდა იყოს ხელმისაწვდომი გადართოებისთვის, მაგრამ დახურული უნდა იყოს მოდიფიკაციისთვის.

მაგალითად მოგვივიდა შეკვეთა DarkRoast with Mocha and Whip .

შეკვეთის მომზადება დავიწყოთ  DarkRoast ობიექტის შექმნით

Capture

sad

ახლა უკვე ვნახოთ ზემოაღნიშნულის პროგრამული კოდი და დავტესტოთ ერთ კონკრეტულ მაგალითზე.

Beverage

Espresso

House Blend

 

 

სატესტოდ შევქმნათ ორი სახეობის ყავა , ესპრესო და House Blend-ი.

Condiment Decorator

 

Mocha

 

Milk

 

Main

 

ახლა ვნახოთ ის, თუ რა გამოიტანა პროგრამამ კონსოლში

final

 

თუ რაიმე კითხვა გაგიჩნდებათ დაწერეთ კომენტარის სახით და გიპასუხებთ🙂

Leave a Reply / უპასუხე

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / შეცვლა )

Twitter picture

You are commenting using your Twitter account. Log Out / შეცვლა )

Facebook photo

You are commenting using your Facebook account. Log Out / შეცვლა )

Google+ photo

You are commenting using your Google+ account. Log Out / შეცვლა )

Connecting to %s