什么是模板方法模式?
在方法中定义一个算法框架,而一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
这个模式创建了一个算法模板,即一个方法,这个方法中将算法定义成一组步骤(一些列方法的组合,包括抽象方法、实现方法,钩子),其中可能产生差异性的方法就生命为抽象方法,又子类去实现。一成不变的方法就可以自己直接实现,为了保护算法,可以将模板和算法生命为 final。如果模板中的某个算法是可选的,则可以插入钩子,子类决定是否实现具体的钩子,从而可以影响模板内的流程。
模板中的方法,不需要子类时就自己实现,需要子类时,就声明为抽象,由子类去实现。这就是传说中的好莱坞原则。。。
钩子:一种方法,在父类中不做事,后者只做默认的事,由于在父类中已经有了默认实现,子类可以不实现钩子,除非子类项项对模板中的相关步骤进行干预,才去实现它。
这种模式,看起来更像是高层对底层的约束,在父类的模板中,按照步骤调用方法,固有逻辑就自己实现了,会变化的部分则抽象起来让子类去实现,允许子类做决定的部分就加上钩子。这样就实现,我想让你改的地方你能改,不想让你改的地方,想都别想。子类只能对模板做有限的决定,大体上还是要按照模板进行。
网友评论