    01: /**
    02:    This interface describes the tasks that an invoice
    03:    formatter needs to carry out.
    04: */
    05: public interface InvoiceFormatter
    06: {
    07:    /**
    08:       Formats the header of the invoice.
    09:       @return the invoice header
    10:    */
    11:    String formatHeader();
    12:
    13:    /**
    14:       Formats a line item of the invoice.
    15:       @return the formatted line item
    16:    */
    17:    String formatLineItem(LineItem item);
    18:
    19:    /**
    20:       Formats the footer of the invoice.
    21:       @return the invoice footer
    22:    */
    23:    String formatFooter();
    24: }