设计模式之模板方法
一、模板方法的使用场景
在软件构建过程中,对某一项任务,它常常有稳定的整体操作结构,但是各个子步骤有很多改变需求,或者由于固有原因(如框架和应用之间的关系)而无法和任务的整体结构同时实现。如何在确定一个稳定操作的前提下,来灵活应对各个子步骤的变化,或者晚期实现需求。
我们先看一个例子:
//类库开放人员 public class Library { public void step1() { } public void step3() { } public void step5() { } }
//应用开发人员 public class Application { public boolean step2() { return true; } public void step4() { } public static void main(String[] args) { Library library = new Library(); Application application = new Application(); library.step1(); if (application.step2()) { library.step3(); application.step4(); } library.step5(); } }
某个功能需要使用5个方法,类库开发人员只能实现其中三个,另外的需要应用开放人员去开发,再进行组合。可能你也会这么做吧,但是这么做其实并不是一个完美的解决方案。因为main方法的整个流程是固定的,只是其中的几个步骤的实现是可变的。
二、使用模板方法
我们对Library类进行改良:
//类库开放人员 public abstract class Library { private void step1() { } private void step3() { } private void step5() { } protected abstract boolean step2(); protected abstract void step4(); public void run() { step1(); if(step2()) { step3(); step4(); } step5(); } }
//应用开发人员 public class Application extends Library{ public boolean step2() { return true; } public void step4() { } public static void main(String[] args) { Application application = new Application(); application.run(); } }
应用开放人员不需要再关心方法的调用流程,只需要实现定制的方法即可,将早绑定变为晚绑定,从而实现代码的重用,降低开放人员的开放难度。简单好用