DI は、C++ の、p-impl パターン。
外部から、後に作られる、依存性を注入する

class A { new B(引数); }
class A { b = 構築メソッド }

上のように、クラスA 内で、直接B を作らず、
構築メソッドで、Bインスタンスを作る

例えば、クラスBの引数の変更が、クラスAに及ばないように、疎結合にしている。
クラスA・Bの作者が、同一でない場合に、効果が大きい

間接的に、Duck Typing, Interface を使う事で、インターフェース・構築メソッドが固定されるが、
同じ構築メソッドを使うことで、似たようなクラスを扱いやすい