Template Method pattern to explain

模板方法的定义与类型,首先呢他定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现,

打个比方,把大象放进冰箱,分几步,首先呢打开冰箱门,然后把大象放进去,然后关上冰箱门,那这三个步骤就可以

用模板方法设计模式,还比如我们办一些入职流程,都是要按一定的流程,并且封装好的算法,算法就是一个处理过程,

我们简单理解成一个函数,也是OK的,也就是说呢模板方法,对应了算法的骨架,我们知道算法所需要的关键步骤,

那么看一下定义补充,那模板方法可以使子类在不改变算法结构的情况下,重新定义算法的某些步骤,他的类型是行为型,

那模板方法这个设计模式,非常简单,一会我们coding的时候,边coding边体会,相信这个设计模式很容易掌握的

我们看一下模板方法的适用场景,一次性实现算法的不变的部分,并将可变的行为留给子类来实现,怎么理解呢,

例如说我有一套步骤,例如说还是刚刚提的那个例子,往冰箱里放东西,打开冰箱门,这是不变的,放东西是可变的,

放什么东西,那A这个子类可以放大象,B这个子类也可以放老鼠,然后关上冰箱门,关上冰箱门也是一个算法,第二个呢

就是各子类中公共的行为,被提取出来并集中到一个公共父类中,例如我们刚刚说的,开冰箱门和关冰箱门,从而避免

代码重复,那这一块还是比较容易理解的,那综上所述模板方法模式的目的呢,就是让子类扩展,或者具体实现模板方法

中的某些方法的步骤,也就是说对于模板来说,是一套固定的算法,但是我通过子类可以扩展,固定算法中的某些算法

的步骤,那我们看一下

模板方法都有哪些优点呢,首先提高复用性,怎么理解呢,将相同部分的代码呢,放在抽象的父类中,第二呢提高了

扩展性,将不同的代码,放入不同的子类中,通过对子类的扩展呢,添加新的行为,还有呢符合开闭原则,这个呢很好

理解,通过一个父类,调用其子类的操作,然后通过对子类的扩展,来增加新的行为,也就是说模板方法模式呢把不变的

行为写在父类上,去除子类的重复代码,来体现它的优势,更简单的理解,模板方法提供了一个很好的复用平台

模板方法有哪些缺点呢,首先类数目的增加,很简单,因为我们引入了抽象类,对于每一个不同的实现呢,

都需要一个子类来实现,这样呢就导致了类的增加,间接的增加了系统实现的复杂度,另外呢还有一点,

模板方法主要是通过继承来实现的,那这个也是继承关系自身的缺点,如果父类添加新的抽象方法,那所有的

子类都要改一遍,这个呢也很好理解,如果子类不去修改,实现这个新的抽象方法的话,程序也是编译不过去的
我们接着来看一下模板方法的一个扩展,这里面主要讲一下钩子方法,那钩子方法提供了缺省的行为,

子类可以在必要时进行扩展,那钩子方法现在不理解没有关系,以后我们写代码的时候,你们肯定会理解,

这个呢非常容易,简单理解说这个钩子方法,是这个模板对子类更进一步的开放和构造,我们再看一下模板

方法的相关设计模式

首先模板方法和工厂方法这两个设计模式,那工厂方法是模板方法的一种特殊实现,然后再看一下模板方法模式,

和策略模式,那策略模式会在后面来讲,这里先对他两进行一个对比,那策略模式和模板方法模式呢,这里面都有封装

算法,那他们之间最主要的区别是什么呢,首先策略模式,他的目的是使不同的算法,可以相互替换,并且不影响应用层,

客户端的使用,而模板方法模式呢,是针对定义一个方法的流程,而将一些不太一样的实现步骤呢,交给子类去实现,

那模板方法模式是不改变算法的流程的,而策略模式可以改变算法的流程的,并且他们之间是可以相互替换的,那策略模式

我们后面也会讲,尤其我们在代码里面有大量的if else的时候,就可以考虑是否可以使用策略模式,我们可以认为一个if

或者一个else,或者一个else if里边,这些都是不同的策略

 

Guess you like

Origin blog.csdn.net/Leon_Jinhai_Sun/article/details/91411057