Effective Java 5.优先考虑依赖注入来引用资源

416 阅读1分钟

有许多类会依赖一个或多个底层的资源。书中的例子是需要依赖词典,我也是参照此帖中的例子来做的发散。

public class ComputerDemo {
    private static final Computer computer = new Computer();

    public static void doThing() {
        computer.program();
    }

    public static void main(String[] args) {
        doThing();
    }

}

或者将Computer实现为单例。 这两种方式都不理想,它们都是假定只有一个电脑可以用。实际上,还需要区分是windows电脑还是mac电脑等。总之不会是一台电脑就可以满足所有需求。 解决方法:

  1. Computer作为父类,Windows电脑和 Mac电脑继承电脑。每次调用program传入对应的Computer对象,就可以满足对应的需求。这是书中满足该需要最简单的模式
public class ComputerDemo {
    public static void doThing(Computer computer) {
        computer.program();
    }

    public static void main(String[] args) {
        doThing(new MacComputer());
        doThing(new WindowsComputer());
    }
}
  1. 第一种模式的变体是,将工厂传给构造器,工厂可以被重复调用来创建类型实例的一个对象,表现为工厂方法模式。Java8增加的接口Supplier<T>,最适合用于表示工厂。带有Supplier<T>的方法,通常应该限制输入工厂的类型参数使用有限制的通配符类型。 依赖注入极大提升了类的灵活性、可重用性和可测试性

这一条其实看的不是很明白(不清楚是书翻译的不太行还是经验太少),只能是草草结束。等有感觉了再来翻看