许多类的实现通常会依赖其他资源类。大多数实现会采用以下两种方式
- 把资源类声明为静态实体类
弊端:静态实体类是与类绑定的,无法在类实例化的时候修改类依赖的资源实例 - 采用单例模式
弊端:把资源实体类定义为final,就无法改变资源类的类型。
这两种实现方式都基于了一个前提,这个类的实现只依赖资源类的一种实例。
采用依赖注入的方式可以很好地提供灵活性,当在创建类的实例的时候,才把资源类实例传给类构造器。
工厂方法模式可以允许客户端传入工厂来实现指定类型的任何子类型。
总之,当一个类依赖多个资源的时候,千万不要用单例或静态实例来实现该类,也不要用该类直接创建这些资源。相反,通过传入资源、或工厂给构造器来创建他们,这种思想就是依赖注入。