DataObject convert(String result); } interface ProcessManager { String process(Data data); } class ProcessJob { // ... ProcessJob (Input input, Output output, ProcessManager processManager ) { this.input = input; this.output = output; this.processManager = processManager; } DataOutput process() { Data data = this.input.get(); String result = this.processManager .process(data); return this.output.convert(result); } } ProcessJob Input ProcessManager Output DatabaseInput CustomProcessManager JSONOutput Interface Interface Interface Implementation Implementation Implementation uses uses uses implements implements implements