1.1.2 Injecting dependencies(胡乱翻译)

1.
package com.springinaction.knights;
public class DamselRescuingKnight implements Knight {
private RescueDamselQuest quest;
public DamselRescuingKnight() {
quest = new RescueDamselQuest();
}
public void embarkOnQuest() throws QuestException {
quest.embark();
}
}

上面的例子1,DamselRescuingKnight创建了自己的quest;

2.

package com.springinaction.knights;
public class BraveKnight implements Knight {
private Quest quest;
public BraveKnight(Quest quest) {
this.quest = quest;
}
public void embarkOnQuest() throws QuestException {
quest.embark();
}
}

上面的例子2,BraveKnight没有创建自己的quest,而是以充当构造方法参数的方式在构造方法被调用的时候提供了一个quest.特别的地方是,这里的quest是一个接口,所有的xxxxQuest都实现了这个接口。因此BraveKnight可以通过调用aaaaaQuest来调用业务方法,也可以通过bbbbQuest来调用方法。或者使用其他的任何实现了quest的实现类来调用方法
关键在于BraveKnight没有和特定的一个quest连接在一起。他不用去关心他使用了哪个quest,因为所有的特定的quest都实现了Quest这个接口。这便就是 松散耦合的好处。如果一个object只通过他们的接口(而不是他们的实现或者他们是如何实例化的)来知道它的依赖,那么这个依赖可以使用一个不同的实现来交换而同时这个object却没发现依赖改变了。

 

你可能感兴趣的:(1.1.2 Injecting dependencies(胡乱翻译))