zoukankan      html  css  js  c++  java
  • 设计模式(十七)——模板方法模式

    1.描述

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

    2.模式的使用

    ·抽象模板(Abstract Template):抽象模板是一个抽象类。抽象模板定义若干方法表示一个算法的各个步骤,这些算法中有抽象方法也有非抽象方法,其中抽象方法称作原语操作(Primitive Operation)。重要的一点是,抽象模板中还定义了一个称作模板方法的方法,该方法不仅包含有抽象模板中表示算法步骤的方法调用,而且也可以包含有定义在抽象模板中的其他对象的方法调用,及模板方法定义了算法的骨架。

    ·具体模板(Concrete Template):具体模板是抽象模板的子类,实现抽象模板中的原语操作。

    3.使用情景

    ·设计者需要给出一个算法的固定步骤,并将某些步骤的具体实现留给子类。

    ·需要对代码重构,可以通过钩子方法对某些步骤进行挂钩,具体模板通过钩子可以选择算法骨架中的某些步骤。

    4.优点

    ·可通过在抽象模板定义模板方法给出成熟的算法步骤,同时不限制步骤的细节,具体模板实现算法细节不会改变整个算法骨架。

    ·通过钩子方法对某些步骤进行挂钩,可以选择算法骨架中的某些步骤。

    5.UML

    6案例

     1 package 模板方式;
     2 
     3 import java.sql.*;
     4 
     5 public class test1 {
     6 
     7     public static void main(String[] args) {
     8         // TODO Auto-generated method stub
     9 
    10     }
    11 
    12 }
    13 
    14 abstract class OperationDatabase{
    15     Connection con;
    16     Statement sql;
    17     ResultSet rs;
    18     String dataBase, tableName;
    19     
    20     OperationDatabase(String dataBase, String tableName){
    21         this.dataBase = dataBase;
    22         this.tableName = tableName;
    23     }
    24     
    25     public final void lookResult(){
    26         
    27     }
    28     
    29     public abstract void loadDriver();
    30     
    31     public abstract void creatConnection();
    32     
    33     public final void creatStatement(){
    34         try{
    35             sql = con.createStatement();
    36         }catch(SQLException e){
    37             e.printStackTrace();
    38         }
    39     }
    40     
    41     public final void handleResult(){
    42         try{
    43             DatabaseMetaData metaData = con.getMetaData();
    44             ResultSet rs1 = metaData.getColumns(null, null, tableName, null);
    45             int numberOfField = 0;
    46             while(rs.next()){
    47                 numberOfField++;
    48                 System.out.printf("%-15s", rs1.getString(4));
    49             }
    50             System.out.println();
    51             rs = sql.executeQuery("select *from" + tableName);
    52             while(rs.next()){
    53                 for(int i = 0; i <= numberOfField; i++)
    54                     System.out.printf("%-15s", rs.getString(i));
    55                 System.out.println();
    56             }
    57             con.close();
    58         }catch(Exception e){
    59             e.printStackTrace();
    60         }
    61     }
    62 }
    63 
    64 class OperationAccessDatabase extends OperationDatabase{
    65 
    66     OperationAccessDatabase(String dataBase, String tableName) {
    67         super(dataBase, tableName);
    68         // TODO Auto-generated constructor stub
    69     }
    70 
    71     @Override
    72     public void loadDriver() {
    73         try {
    74             Class.forName("");
    75         } catch (ClassNotFoundException e) {
    76             // TODO Auto-generated catch block
    77             e.printStackTrace();
    78         }
    79         
    80     }
    81 
    82     @Override
    83     public void creatConnection() {
    84         // TODO Auto-generated method stub
    85         
    86     }
    87     
    88 }
  • 相关阅读:
    2019 SDN上机第1次作业
    关键路径法(Critical Path Method, CPM)
    iOS 一个项目添加多个TARGET
    为图形处理器提供数据
    OpenGL全流程详细解读
    小技巧之padding-bottom实现等比例图片缩放
    Mac 显示隐藏文件
    mac 下修改 jenkins 端口以及Jenkins的启动、关闭与更新
    Mac上Charles抓包iOS的https请求
    python自动循环重启android系统
  • 原文地址:https://www.cnblogs.com/cxy2016/p/7670370.html
Copyright © 2011-2022 走看看