Skip to content

Instantly share code, notes, and snippets.

@danveloper
Created May 29, 2013 17:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danveloper/5672279 to your computer and use it in GitHub Desktop.
Save danveloper/5672279 to your computer and use it in GitHub Desktop.
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