模板方法模式原文介绍
定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。
这原文乍一看是不是特抽象?这特么说的都是啥玩意,这也太抽象了吧,我相信只要是一个正常受过九年义务教育的人都看不懂这说的啥,不过呢,今天这篇文章就是帮助大家彻底理解这个东东的;模板方法通俗地讲,其实就是先定义一个抽象方法,将相同的逻辑放在抽象类里面,将不同的逻辑由子类实现,
模板方法使用场景
实现一些操作时,整体部分是固定的,但是其中一小部分容易变,这个时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现,模板方法的具体流程如下
一般来说,我们在看源码的时候,如果看到有抽象类,那么百分之90以上的抽象类都是用的模板方法;其中我们常用的servlet里面的HttpServlet抽象类继承了GenericServlet抽象类,GenericServlet就使用到了模板方法,GenericServlet里的service方法是抽象方法;
代码实现
- package com.designPatterm.template;
-
-
- /**
- * 模板方法模式
- */
- public class TemplateMethod {
- public static void main(String[] args) {
-
- // 我们运行以下,看看小明和小红的一天都是怎么度过的吧
- OneDay ming = new XiaoMing();
- ming.getUp();
- ming.action();
-
- OneDay hong = new XiaoHong();
- hong.getUp();
- hong.action();
- }
- }
-
- // 抽象类,每个人的一天是怎么度过的
- abstract class OneDay{
-
- // 姓名
- protected String name = null;
-
- // 起床
- public void getUp(){
- System.out.println(name + "起床啦!!!");
- }
-
- // 起床后的动作,因为每个人都有不同的行为,所以交给子类实现,
- public abstract void action();
- }
-
- // 小明起床后的动作
- class XiaoMing extends OneDay{
-
- public XiaoMing(){
- this.name = "小明";
- }
-
- @Override
- public void action() {
- System.out.println(name + "先去刷牙");
- }
- }
-
- // 小红起床后的动作
- class XiaoHong extends OneDay{
-
- public XiaoHong(){
- this.name = "小红";
- }
-
- @Override
- public void action() {
- System.out.println(name + "先去洗脸");
- }
- }