You can extend any of the pricing calculators to add functionality, if that suits your needs more than implementing one of the provided interfaces. As an example this section describes the order of calls in ItemDiscountCalculator; other calculators may vary:

You can override any of these methods to provide new functionality while leveraging the existing code.