• 模板方法设计模式


    一、模板方法定义

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

    二、模板方法程序构成

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

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

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

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

    • 抽象方法:要求子类必须实现的方法,是完成模板方法的算法步骤中必须由子类完成的个性化定义。(一个抽象方法由抽象类声明、由其具体子类实现。)
    • 最终方法:子类不能重写的方法,是若要完成模板方法的算法步骤,对于所有子类执行都一样的步骤。
    • 钩子方法,是父类给出默认实现,但子类也可以重写的方法。(个钩子方法由一个抽象类或具体类声明并实现,而其子类可能会加以扩展。通常在父类中给出的实现是一个空实现(可使用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 }

    输出结果:

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

      

  • 相关阅读:
    js Math对象
    extjs 获取Dom对象
    easyui validatebox 验证集合
    Ext.Ajax.request与form.submit的用法区别
    js获取url参数值
    【原创】extjs4做的grid,带分页,搜索
    SqlServer2005数据库同步
    【原创】jquery实现动态多组图片切换
    easyui表单数据验证
    对象模型图【OMD】阅读指南
  • 原文地址:https://www.cnblogs.com/hoje/p/8087144.html
Copyright © 2020-2023  润新知