【设计模式】模板模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/as15932641664/article/details/81976080

  请客吃饭

      首先,这个请客吃饭就相当于一个类,然后到了饭店要进行点菜,点完菜要一起吃饭,吃完饭要去结账。这其中的点菜、吃饭、结账就相当于类中的三个方法。所以知识点就来了。。。

      这个过程中点菜和结账这两个环节都必不可少,所以点菜和吃饭这两个方法就相当于一个模板,通用于所有人,不管你是在国外还是国内,也不管你吃的是中餐还是西餐,都会用到这个模板。

      而吃什么就不一样了,有的人吃的是面条,又有的人吃的是满汉全席,所以吃饭这个方法就不能做为通用的模板,将它设置为一个虚方法放到请客吃饭的父类中,让其它子类去调用它。

   

      模板确定了,剩下的就让顾客自己选吃什么就好了

为了更加清楚的说明,我就不得不拿出我隐藏多年的美术能力来为大家画上一幅图


  抄题抄错了咋办

     

  背景:老师让学生把黑板上的题抄下来,然后把答案写在题下

      这里就可以看出,不管这个班级里有多少人,是学渣还是学霸,他们抄的题都是一样的, 唯一不同的就是每个人的答案不一样。这样的话问题也就来了,如果有个别人将黑板上的题抄错的话,他做的在对也白费功夫。

      这时候老师就要出一份试卷,打印多份,让学生填答案就可以了。这份试卷就是模板,建立一个父类,在建立学生子类,调用父类中模板,直接写答案就好了


  模板方法模式

 

      定义:一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

   结构图:

 AbstractClass(抽象类):在抽象类中定义了一系列基本操作,这些基本操作可以是具体的,也可以是抽象的,每一个基本操作对应算法的一个步骤,在其子类中可以重定义或实现这些步骤。同时在抽象类中实现了一个模板方法,用于定义个算法的框架,模板方法不仅可以调用在抽象类中实现的基本方法,也可以调用在抽象类的子类中实现的基本方法,还可以调用其他对象中的方法。

 

ConcreteClass(具体子类):它是抽象类的子类,用于实现在父类中声明的抽象基本操作以完成子类特定算法的步骤

猜你喜欢

转载自blog.csdn.net/as15932641664/article/details/81976080