欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

模板方法设计模式

程序员文章站 2022-03-03 09:50:47
一、模板方法定义 定义一个操作中的某种算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类在不改变一个算法结构的前提下,对这些步骤进行个性化定义。 二、模板方法程序构成 在模板方法设计模式中,存在一个父类,其中包括两类方法:模板方法和步骤方法。 模板方法,即实现某种算法的方法步骤。而这些步骤都 ......

一、模板方法定义

   定义一个操作中的某种算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类在不改变一个算法结构的前提下,对这些步骤进行个性化定义。

二、模板方法程序构成

  在模板方法设计模式中,存在一个父类,其中包括两类方法:模板方法和步骤方法。

 模板方法,即实现某种算法的方法步骤。而这些步骤都是调用的步骤方法完成的。

 步骤方法,即完成模板方法的每个阶段性方法。每个步骤方法完成某一特定的、完成总算法的一部分功能。

步骤方法有三种类型:抽象方法、最终方法和钩子方法。

抽象方法:要求子类必须实现的方法,是完成模板方法的算法步骤中必须由子类完成的个性化定义。(一个抽象方法由抽象类声明、由其具体子类实现。) 最终方法:子类不能重写的方法,是若要完成模板方法的算法步骤,对于所有子类执行都一样的步骤。 钩子方法,是父类给出默认实现,但子类也可以重写的方法。(个钩子方法由一个抽象类或具体类声明并实现,而其子类可能会加以扩展。通常在父类中给出的实现是一个空实现(可使用virtual关键字将其定义为虚函数),并以该空实现作为方法的默认实现,当然钩子方法也可以提供一个非空的默认实现。)

三、Demo

模板方法设计模式

 

 1 package com.jmu.service;
 2 
 3 public abstract class Shopping {
 4     // 模板方法
 5     public void buyGoods() {
 6         userLogin();
 7         buy();
 8         pay();
 9     }
10 
11     // 子类不能重写的方法
12     public final void userLogin() {
13         // TODO Auto-generated method stub
14         System.out.println("用户登录");
15     }
16 
17     // 子类必须实现
18     public abstract void buy();
19 
20     // 钩子方法
21     public void pay() {
22         // TODO Auto-generated method stub
23         System.out.println("使用支付宝支付");
24     }
25 }
 1 package com.jmu.service;
 2 
 3 public class ClothesShopping extends Shopping {
 4 
 5     @Override
 6     public void buy() {
 7         // TODO Auto-generated method stub
 8      System.out.println("购买衣服");
 9     }
10 
11     @Override
12     public void pay() {
13         // TODO Auto-generated method stub
14         System.out.println("使用银联付款");
15     }
16  
17 }
 1 package com.jmu.service;
 2 
 3 public class ShoesShopping extends Shopping {
 4 
 5     @Override
 6     public void buy() {
 7         // TODO Auto-generated method stub
 8       System.out.println("购买运动鞋");
 9     }
10 
11 }
 1 package com.jmu.service;
 2 
 3 public class MyTest {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         Shopping shoesShopping = new ShoesShopping();
 8         shoesShopping.buyGoods();
 9         System.out.println("---------------");
10         Shopping clothesShopping = new ClothesShopping();
11         clothesShopping.buyGoods();
12     }
13 
14 }

输出结果:

用户登录
购买运动鞋
使用支付宝支付
---------------
用户登录
购买衣服
使用银联付款