手工依赖注入
依赖注入模式的目标之一是使单元测试更简单。我们不需要特殊的框架就可以实践依赖注入模式。依靠手工编写代码,你可以得到该模式大约80%的好处。
当上例中的客户代码向工厂对象请求一个服务时,根据依赖注入模式,客户代码希望它所依赖的对象实例可以被传入自己。也就是说:不要调用我,我会调用你。
public class Client {
private final Service service;
public Client(Service service) {
this.service = service;
}
public void go() {
service.go();
}
}
这让我们的单元测试简化了不少。我们可以只传入一个伪服务对象,在结束后也不需要多做什么。
public void testClient() {
MockService mock = new MockService();
Client client = new Client(mock);
client.go();
assertTrue(mock.isGone());
}
我们也可以精确地区分出客户代码依赖的API。
现在,我们如何连接客户和服务对象呢?手工实现依赖注入的时候,我们可以将所有依赖逻辑都移动到工厂类中。也就是说,我们还需要有一个工厂类来创建客户对象。
public static class ClientFactory {
private ClientFactory() {}
public static Client getInstance() {
Service service = ServiceFactory.getInstance();
return new Client(service);
}
}
手工实现依赖注入需要的代码行数和简单工厂模式差不多。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13270562/viewspace-214952/
,如需转载,请注明出处,否则将追究法律责任。