最近在接受采访时,我正在解释我曾参与过的框架。我说我们通过使用模板方法设计模式提供可扩展性来创建控制反转。我说这是一个控制反转的例子,我们的框架调用框架用户实现的方法,面试官说模板方法设计模式不是IOC的一个例子。我想知道我对IOC的理解是否不正确?
答案 0 :(得分:6)
你的面试官错了。模板方法模式确实使用控制反转。事实上,维基百科条目特别提及它。
http://en.wikipedia.org/wiki/Template_method_pattern
模板方法用于框架中,每个框架实现域架构的不变部分,留下"占位符"用于自定义选项。这是控制反转的一个例子,也称为好莱坞原则。
不幸的是,您要么没有理解IoC或模板方法模式,要么向他们解释为什么它是IoC的一个例子。不幸的是,许多人似乎认为IoC意味着依赖注入,这就是它。
答案 1 :(得分:0)
是的,模板模式是IOC的一个示例,并且可以使用Template模式以及一些其他技术(DI等)来实现IOC。在继承中,子类从父类中调用方法,但是使用模板模式,我们使用基类中的最终方法实现定义算法(子类无法更改的步骤顺序),如下面提到的示例(Base / Parent类)所示是将在子类中定义的调用方法,因此控制权被反转,而基类则控制核心算法,因此这就是在这种情况下实现IOC的原因和所在。
示例-假设我们需要处理文件。
public abstract class FileProcessor {
public final void processFile() {
preProcess();
process();
postProcess();
}
public abstract void preProcess();
public abstract void process();
public abstract void postProcess();
}