title: Alternative to (or refinement for) State Pattern suffering from LSP violation
body: <p>I'm having trouble wrapping my head around state-based functionality for an invoicing system we are currently building. The system will support calculation, manual approval, printing, and archiving of invoices. </p>
  
  <p>At first I thought we should use the <a href="http://en.wikipedia.org/wiki/State_pattern" rel="nofollow">State Pattern</a> to model this. An invoice would be the context, which delegates printing, archiving, etc. to its currently assigned state.</p>
  
  <p>But this is obviously a bad idea, because the different states (created, approved, printed, archived) should not support the same operations. E.g., you shouldn't be able to print an invoice, which hasn't been approved before. Throwing exceptions for unsupported operations would be a violation of LSP. I found a general description of this problem <a href="http://codebetter.com/gregyoung/2010/03/09/state-pattern-misuse/" rel="nofollow">here</a>.</p>
  
  <p>Does anybody have an idea, how to implement this appropriately?</p>
  
  <hr>
  
  <p>PS: I'm aware that this might sound like some lame-ass homework assignment, but it's not; I need this for a real world system.</p>