    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:       Formats a line item of the invoice.
    14:       @return the formatted line item
    15:    */
    16:    String formatLineItem(LineItem item);
    17:    /**
    18:       Formats the footer of the invoice.
    19:       @return the invoice footer
    20:    */
    21:    String formatFooter();
    22: }