Podá objektu jeho závislosti zvonku namiesto toho, aby si ich zháňal sám.
class Logger { write(message) { throw new Error('abstraktná metóda'); }} class FakeLogger extends Logger { written = []; write(message) { this.written.push(message); }} class FileLogger extends Logger { write(message) { this.file.append(message); }} // What the service uses comes from outside — it never builds it itself.class Service { constructor(logger) { this.logger = logger; } receive(order) { this.logger.write('received ' + order.id); }} // Test environment: a fake logger, nothing is really written.const inTest = new Service(new FakeLogger());inTest.receive(order); // Production: the same service code, a real write.const inProduction = new Service(new FileLogger());inProduction.receive(order);