首先来了解下模板方法吧,我感觉只要是面向对象,那么就基本都会用到...
我们常常面临着 流程确定,但具体的某个实现不确定的情况,它有着稳定的结构,但各个子部分可能会因为需求而变化,在这种时候就很适合模板方法。
假定一天中出门,dosomething,回家;一天中出门和回家是固定的,但是每天出去干的事情可能不同,可能打球,可能学习....这种实现方法整个流程控制都由我们决定,也就导致了所有行为都要在编译期是确定的,否则我们就无法完成整个流程而造成了一种紧耦合的状况
而第二种方法我们将整个控制流程交给父类otherDay,只需要去实现可能变化的dosomething行为。当执行时反过来从子类myDay中调用dosomething而实现松耦合。程序从由我们手动一步步调用转变为我们实现的部分被程序调用,一切流程都是固定好的,而程序执行到可能变化的行为时过来查看子类的行为即可。
实现模板方法的要点在于我们要确定哪些行为是稳定的,哪些行为是变化的。我们要找到稳定和变化的临界点,将稳定和变化隔离开来。
模板模式的UML图:
模式定义
定义一个操作中的算法的骨架 (稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改(复用)一个算法的结构即可重定义(override 重写)该算法的某些特定步骤。
——《设计模式》GoF