在最近的一次采访中,我解释了我所从事的一个框架。我说过,我们通过使用模板方法设计模式提供可扩展性来创建控制反转。我说这是控制反转的一个例子,我们的框架调用由框架用户实现的方法,面试官说模板方法设计模式不是IOC的一个例子。我想知道我对IOC的理解是否有误?
面试官错了。模板方法模式确实使用了控制反转。事实上,维基百科条目特别提到了这一点。
http://en.wikipedia.org/wiki/Template_method_pattern模板方法在框架中使用,其中每个框架实现域体系结构的不变部分,为自定义选项留下"占位符"。这是控制反转的一个例子,也被称为好莱坞原则。
不幸的是,您要么不太了解IoC,要么不太了解Template方法模式,无法向他们解释为什么这是IoC的一个例子。不幸的是,许多人似乎认为IoC意味着依赖注入,就是这样。
是的,模板模式是IOC的一个例子,IOC可以使用模板模式以及其他一些技术(DI等)来实现。在继承子类调用父类的方法但使用模板模式我们定义一个算法(一系列步骤不能改变子类)中使用最后一个方法实现基类根据提到的例子所示,基地/父类调用方法将子类中定义控制倒和基类的控制核心算法,所以这就是为什么在这种情况下,IOC实现。
示例—假设我们需要处理一个文件。
public abstract class FileProcessor {
public final void processFile() {
preProcess();
process();
postProcess();
}
public abstract void preProcess();
public abstract void process();
public abstract void postProcess();
}