优点:
Client不必知道其使用对象的具体所属类。
一个对象可以很容易地被(实现了相同接口的)的另一个对象所替换。
对象间的连接不必硬绑定(hardwire)到一个具体类的对象上,因此增加了灵活性。
松散藕合(loosens coupling)。
增加了重用的可能性。
提高了(对象)组合的机率,因为被包含对象可以是任何实现了一个指定接口的类。
缺点:
设计的复杂性略有增加