Here's an outline of the structure of my inheritance-based solution. abstract class Decoder { public abstract String decode(String code); } class AsciiDecoder extends Decoder { ... } class EnumeratedDecoder extends Decoder { public EnumeratedDecoder(String coding) { ... } public String decode(String code) { ... } } class EBCDICEnumeratedDecoder extends EnumeratedDecoder { public EBCDICEnumeratedDecoder(String coding) { ...uses super... } public String decode(String code) { ...uses super... } }