模板方法设计模式是控制反转的一个例子吗?



在最近的一次采访中,我解释了我所从事的一个框架。我说过,我们通过使用模板方法设计模式提供可扩展性来创建控制反转。我说这是控制反转的一个例子,我们的框架调用由框架用户实现的方法,面试官说模板方法设计模式不是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();
}

最新更新