有许多类会依赖一个或多个底层的资源。书中的例子是需要依赖词典,我也是参照此帖中的例子来做的发散。
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电脑等。总之不会是一台电脑就可以满足所有需求。 解决方法:
- 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());
}
}
- 第一种模式的变体是,将工厂传给构造器,工厂可以被重复调用来创建类型实例的一个对象,表现为工厂方法模式。Java8增加的接口
Supplier<T>,最适合用于表示工厂。带有Supplier<T>的方法,通常应该限制输入工厂的类型参数使用有限制的通配符类型。 依赖注入极大提升了类的灵活性、可重用性和可测试性
这一条其实看的不是很明白(不清楚是书翻译的不太行还是经验太少),只能是草草结束。等有感觉了再来翻看