我一直在阅读Gamma等人的《设计模式》。我对模板方法与依赖注入有一个问题。
使用模板方法,您可以将策略“模板化”,以提供所需操作或计算的替代方案。因此,与从几个可选项中选择一个策略并将其编码到类中不同,您允许类的用户指定要使用的替代方案。
这听起来对我来说非常合理。但是,我遇到了一个概念上的障碍。
如果您使用策略对象实例化一个类,则策略对象需要实现抽象接口。程序员可以编写不同的策略,所有这些策略都可以编译成类而不会出错,因为这些策略实现了接口。使用这些策略的类是根据策略接口而不是实现进行编码的。
如果您要为这些策略对象定义一个抽象的IPolicy
,为什么不直接使用依赖注入,并在构建时传递IPolicy
呢?
有人能解释一下为什么你会更喜欢模板方法而不是依赖注入吗?