OrderService welded to a concrete EmailSender
OrderService
high-level policy
new EmailSender()
EmailSender
low-level detail
Tray · plug an implementation into the socket
Swap the sender without touching OrderService?
No
Unit-test OrderService with a fake?
No
Depend on the socket (the interface), not the plant (a concrete class). Flip to Inverted and plug things in — OrderService never changes.