Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Introduction - "Redefining the Service Layer with Groovy Categories"
class Payee {
String name
String phoneNumber
Address billingAddress
}
public interface PaymentType {
Payee getPayee();
}
class CreditCardPaymentType implements PaymentType {
enum CreditCardType {
VISA, MASTERCARD, AMEX, DISCOVER
}
CreditCardType cardType
String cardNumber
String securityCode
Date expirationDate
Payee payee
}
class GiftCardPaymentType implements PaymentType {
String cardNumber
String securityCode
Payee payee
}
public interface PaymentService {
/**
* Returns an authorization code
*/
public String process(PaymentType paymentType);
}
class LocalPaymentService implements PaymentService {
// Dependency injected from container
CreditCardPaymentGateway creditCardPaymentGateway
GiftCardPaymentGateway giftCardPaymentGateway
public String process(PaymentType paymentType) throws IllegalArgumentException {
if (paymentType instanceof CreditCardPaymentType) {
return doProcess(paymentType)
} else if (paymentType instanceof GiftCardPaymentType) {
return doProcess(paymentType)
}
throw new IllegalArgumentException("Supplied payment type is not supported.");
}
private String doProcess(CreditCardPaymentType paymentType) {
// ...
}
private String doProcess(GiftCardPaymentType paymentType) {
// ...
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.