დამავწყდა მეთქვა, რომ, ეს დიზაინ პატერნი Creational pattern ოჯხს განეკუთნება.
ამ დიზაინ პატერნის სტრუქტურა ასეთია:
როგორც სურათზე ხედავთ, გვაქვს სტრატეგიის ინტერფეისი, რომელთა მრავალი იმპლემენტაცია შეილება გვქონდეს– მაგალითად გვინდა Payment ის შესრულება. იგი შეიძლება შესრულდეს Visa ელექტრონით, შეიძლება MasterCard -ით.
ალგორითმი უსმენს კლიენტს და იმ იმპლემენტაციას უშვებს რომელიც მოთხოვნას შეესაბამება. მოსმენას და შესაბამის სტრატეგის ალგორითმის გამოძახებას Context ემსახურება.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @author v.koroghlishvili | |
* Enum for Payment methods | |
*/ | |
public enum PaymentType { | |
VISA_ELECTRON, MASTERCARD | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* @author v.koroghlishvili | |
* | |
*/ | |
public class PaymentContext { | |
private PaymentRule paymentRule; | |
public PaymentContext(PaymentType setting) { | |
this.paymentRule = createRule(setting); | |
} | |
/** | |
* This method chooses payment method, | |
* using payment type | |
* @param setting | |
* @return | |
*/ | |
private PaymentRule createRule(PaymentType setting) { | |
switch (setting) { | |
case MASTERCARD: | |
return new VisaElectronRule(); | |
case VISA_ELECTRON: | |
return new MaserCardRule(); | |
default: | |
return null; | |
} | |
} | |
public void cheeckOut(String number) { | |
paymentRule.makePayment(number); | |
} | |
public PaymentRule getValidationRule() { | |
return paymentRule; | |
} | |
} |
PaymentRule ინტეფეისი ,რომლის შვილებიც იქნებიან კონკრეტული იმპლემენტაციები. ჩვენს შემთვევაში ერთი მასტერქარდთან მომუშავე, მეორე ვიზა ელექტრონთან. სწორედ კონტექსტში PaymentRule შვილის რომელიმე ობიექტს ვქმნი (switch ებში), და ვანიჭებ paymentRuleს, რომელიც არის PaymentRule ტიპისა.
ახლა დავწეროთ კონკრეტული სტრატეგიის იმპლემენტაციები.
ეს VisaElectron იმპლემენტაცია. ეს კი უკვე MasterCard–ის:
საბოლოოდ კი ყველაფერი ძალიან მარტივი გვაქ.
No comments:
Post a Comment