Skip to content

Instantly share code, notes, and snippets.

@danveloper
Last active December 17, 2015 21:09
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/5672741 to your computer and use it in GitHub Desktop.
Save danveloper/5672741 to your computer and use it in GitHub Desktop.
Redefined - "Redefining the Service Layer with Groovy Categories"
class LocalPaymentService implements PaymentService {
static {
use (PaymentTypeHandlerRegistrationCategory) {
CreditCardPaymentType.register(CreditCardPaymentProcessor)
GiftCardPaymentType.register(GiftCardPaymentProcessor)
EmployeePaymentType.register(EmployeePaymentProcessor)
CheckPaymentType.register(CheckPaymentProcessor)
}
}
public String process(PaymentType paymentType) {
def processorCategory
use (PaymentTypeHandlerRegistrationCategory) {
processorCategory = paymentType.class.getHandler()
}
// No processor for the payment type
if (!processorCategory) throw new RuntimeException("No handler registered for ${paymentType.class}")
use (processorCategory) {
paymentType.process()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment