Notice: 本文作者只是设计模式、Guice和依赖注入的初学者,所以本文不会指出使用Guice的实现方法有什么好处,所写的代码未必是最佳实践,欢迎提出改进意见。
Builder 模式 http://www.riabook.cn/doc/designpattern/BuilderPattern.htm
使用Guice实现的时候,可以只用bind方法来进行依赖关系的建立,但是这样对现有代码的改造太多。因此这里将使用Guice的另一个特性——Provider来进行Builder模式的改造。使用这种方法的时候,原示例中的代码除了Main类之外都不需要改动:
由于MazeDirector实例的创建需要比较多的参数,所以我们建立一个MazeDirector的Provider,其作用看上去和工厂方法很像。
import com.google.inject.Inject;
import com.google.inject.Provider;
public class MazeDirectorProvider implements Provider<MazeDirector> {
IMazeBuilder mazeBuilder;
@Inject
public MazeDirectorProvider(IMazeBuilder mazeBuilder) {
this.mazeBuilder = mazeBuilder;
}
public MazeDirector get() {
MazeDirector director = new MazeDirector();
director.setMazeBuilder(mazeBuilder);
int[][] maze = { { 1, 1, 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 0, 2, 1 },
{ 1, 0, 1, 0, 1, 0, 1 }, { 1, 0, 2, 1, 0, 1, 1 },
{ 1, 1, 0, 1, 0, 1, 1 }, { 1, 0, 0, 2, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1 } };
director.setMaze(maze);
return director;
}
}
然后需要表现依赖关系的模块类如下:
import com.google.inject.AbstractModule;
public class MazeModule extends AbstractModule {
@Override
protected void configure() {
bind(IMazeBuilder.class).to(DiamondMazeBuilder.class);
bind(MazeDirector.class).toProvider(MazeDirectorProvider.class);
}
}
此时Main方法的内容就很少了,只是关注获取一个MazeDirector对象,并运行其buildMaze方法。
import com.google.inject.Guice;
import com.google.inject.Injector;
public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new MazeModule());
injector.getInstance(MazeDirector.class).buildMaze();
}
}
观察这段代码,当要求获得一个MazeDirector类的实例的时候,Guice会查找绑定关系,,并确定通过MazeDirectorProvider类来提供,MazeDirectorProvider中需要IMazeBuilder接口的注入,依然是Guice完成的。
分享到:
相关推荐
`@Singleton`表示该对象为单例,`@Named`用于指定特定的依赖实现。 3. **模块(Modules)**:Guice中的模块是配置依赖关系的地方,通过扩展`AbstractModule`并重写`configure()`方法,我们可以声明绑定(Bindings)...
注入是Guice实现DI的主要方式,通过`@Inject`注解,Guice可以在构造函数、字段或方法上自动注入所需的依赖。 在Guice 3.0中,引入了一些关键特性: 1. **多绑定**:一个类型可以有多个绑定,这样可以根据不同的...
Java依赖注入框架Guice2是Google开发的一款轻量级的依赖注入库,它极大地简化了Java应用程序中的对象创建和管理。Guice2以其简洁的API和强大的功能在开发者社区中赢得了广泛的认可。依赖注入(Dependency Injection...
总的来说,`安卓Android源码——用Roboguice实现依赖注入`这个主题涵盖了Android开发中的一种高级技术,即依赖注入,以及如何通过Roboguice框架来实现这一技术。通过深入学习和实践,开发者能够提升代码质量和开发...
在"安卓Andriod源码——用Roboguice实现依赖注入-.zip"这个压缩包中,包含的`RoboguiceTest`可能是一个示例项目,用于演示如何在实际的Android应用中集成和使用Roboguice。通过查看和学习这个示例,你将能更深入地...
Roboguice是基于Google的Guice框架改造的,它利用了Java的注解(Annotation)特性,提供了简单易用的API来实现依赖注入。在Android应用中,我们通常会在Activity、Service、BroadcastReceiver等组件中使用Roboguice...
#### 使用工厂模式实现依赖注入 **工厂模式**是一种常用的创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。这种方式可以隐藏对象的创建细节,提高系统的灵活性。 示例代码展示了如何...
例如,在上面的例子中,我们可以使用 Guice 来注入 Service 对象到 Client 对象中,而不需要使用工厂模式或其他方式来获取 Service 对象。这可以使得 Client 对象更加灵活和可维护。 Guice 的优越性体现在以下几个...
- **简单工厂模式**:虽然能够实现一定程度的解耦,但在实际应用中存在以下局限性: - **单元测试复杂**:需要手动设置模拟对象,并在测试结束后清理。 - **API限制**:如单例模式的强制使用,限制了应用模式的...
Guice通过注解来实现依赖注入,允许开发者声明他们所需的依赖,而无需手动创建对象或使用复杂的工厂模式。这样可以提高代码的可测试性、可维护性和灵活性。 MyBatis-Guice 的核心功能包括: 1. **自动配置**:通过...
在Android应用开发中,依赖注入(Dependency Injection,简称DI)是一种设计模式,它可以帮助我们创建松耦合、可测试和可维护的代码。Roboguice是一款轻量级的依赖注入框架,专为Android应用程序设计,它基于Google...
总结来说,这个基于Guice的HelloWorld项目旨在演示如何使用Guice框架进行依赖注入,以实现代码的松耦合。Guice提供了一种优雅的方式来管理对象及其依赖,使得代码更易于理解和测试。通过学习和实践这个项目,开发者...
依赖注入是一种设计模式,它帮助开发者解耦代码,使得组件之间通过接口进行通信,而不是直接引用彼此,从而提高代码的可测试性、可维护性和可扩展性。 Guice的核心概念主要包括模块(Modules)、绑定(Bindings)、...
2. **工厂模式的局限性**:工厂模式虽然可以在一定程度上缓解依赖问题,但仍然存在获取工厂本身的依赖问题,且引入了大量的样板代码。 3. **服务定位器模式的局限性**:服务定位器模式虽然有所改善,但在验证服务...
injector, python 依赖注入框架,由Guice启发 注入- python 依赖注入框架,由Guice启发 简介基于 Pattern的依赖注入在 python 中比它的他语言更有用,主要是因为它对关键字参数的支持。这就是说,一个帮助这个过程的...
3. **Guice依赖注入**:为了进一步优化依赖管理,引入了Guice。在`MyModule`类中定义了`Service`接口到`ServiceImpl`实现的绑定。这样,Guice就可以自动管理依赖关系,无需手动实例化对象。 #### 四、Guice基本用法...