`

设计模式之模板方法模式

 
阅读更多

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

 

模板方法的通用类图

 




 
 

我们所说的模板方法指的就是抽象类中的templete方法,该方法实现对doSomething方法的调用并且这个方法的具体实现是交由子类实现的。

 

模板方法的具体应用,比如我们开发的系统需要解析文件并导入数据库,文件类型有txt、csv、xls,我们就可以考虑模板方法模式。

 



 

/**
 * 文件解析的抽象类
 * 
 */
public abstract class AbstractFileParser {

    // 解析文件的模板方法
    public final  void fileParser(File file) {

        // 解析文件
        parser(file);
    }

    // 具体解析文件的逻辑交由子类去实现
    protected abstract void parser(File file);
}

 

/**
 * Txt 文件解析
 */
public class TxtFileParser extends AbstractFileParser {

    /**
     * Txt 文件解析
     * @param file
     */
    @Override
    protected void parser(File file) {

        System.out.println("解析txt文件");
    }

}

 

/**
 * Csv 文件解析
 * 
 */
public class CsvFileParser extends AbstractFileParser {

    /**
     * 解析CSV文件
     * 
     * @param file
     */
    @Override
    protected void parser(File file) {

        System.out.println("开始解析CSV文件");
    }

}

 

/**
 * XLs文件解析
 * 
 */
public class XlsFileParser extends AbstractFileParser {

    /**
     * xls 文件解析
     * 
     * @param file
     */
    @Override
    protected void parser(File file) {

        System.out.println("开始解析xls文件");
    }

}

 

具体的类已经完成,那么如何应用呢?我们可以根据用户上传的文件类型来调用不同的文件解析类

 



 

public class Client {

    public static void main(String[] args) throws IOException {
        
        File file=new File("aaa.txt");
        
        if("txt".equalsIgnoreCase(file.getName().split("[.]")[1])){
            AbstractFileParser parser=new TxtFileParser();
            
            parser.fileParser(file);
        }
        
        if("csv".equalsIgnoreCase(file.getName().split("[.]")[1])){
            AbstractFileParser parser=new CsvFileParser();
            
            parser.fileParser(file);
        }
        
        
        if("xls".equalsIgnoreCase(file.getName().split("[.]")[1])){
            AbstractFileParser parser=new XlsFileParser();
            
            parser.fileParser(file);
        }
    }
}

 

在《java与模式》一书中提到了另一个例子,一个存款计算利息的场景,假设系统需要支持两种存款账号即货币市场账号和定期存款账号,这两种账号的存款利息是不同的,但是我们应该可以重这个场景中抽象出一个方法,即利息的计算,只是利息计算分两种情况,那么就可以使用两个实现类来实现。

 

类图如下:

 



 

 

 

  • 大小: 23.4 KB
  • 大小: 24.8 KB
  • 大小: 19.3 KB
  • 大小: 41.5 KB
分享到:
评论

相关推荐

    深入浅出设计模式之模板方法模式

    ### 深入浅出设计模式之模板方法模式 #### 一、模板方法模式概述 设计模式是软件工程中一种非常重要的技术手段,它能够帮助我们解决常见的编程问题,并提高代码的可重用性、可扩展性和可维护性。模板方法模式是一...

    Java设计模式之模板方法模式Java认证考试.pdf

    Java设计模式之模板方法模式是Java认证考试中的一种重要的设计模式,它通过使用继承关系来定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤...

    Android编程设计模式之模板方法模式详解

    本文实例讲述了Android编程设计模式之模板方法模式。分享给大家供大家参考,具体如下: 一、介绍 在面向对象开发过程中,通常会遇到这样的一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,...

    Java设计模式之模板方法模式.rar

    模板方法模式是面向对象设计模式中的行为模式之一,它在Java编程中有着广泛的应用。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定...

    设计模式-模板方法模式ppt

    ### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...

    设计模式之模板方法模式Java实现和类设计图

    模板方法模式是软件设计模式中的一种行为模式,它在面向对象设计中扮演着重要的角色,尤其是在代码复用和保持代码结构整洁方面。该模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一...

    Java设计模式之模板方法模式.docx

    模板方法模式是一种行为设计模式,它允许在抽象类中定义算法框架,而将具体步骤的实现推迟到子类中。这种模式通常用于那些算法的骨架已经固定,但部分步骤可以根据具体环境有所不同的情况。 在Java中,模板方法模式...

    Python设计模式之模板方法模式实例详解

    本文实例讲述了Python设计模式之模板方法模式。分享给大家供大家参考,具体如下: 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的...

    java设计模式之模板方法模式详解

    "java设计模式之模板方法模式详解" 模板方法模式是一种行为设计模式,主要用于定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。...

    Java经典设计模式之模板方法模式定义与用法示例

    Java经典设计模式之模板方法模式定义与用法示例 模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中去执行。模板方法模式使得子类可以不改变一...

    设计模式的模板方法模式的例子

    模板方法模式是设计模式中行为模式的一种,它在软件工程中扮演着重要的角色,尤其是在创建算法框架时。这种模式允许我们在抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现,使得子类可以不改变算法的结构...

    设计模式--模板方法模式java例子

    模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...

    策略模式结合模板方法模式

    策略模式结合模板方法模式的设计思路 策略模式结合模板方法模式是策略模式的一种变形,目的是为了解决策略模式中的一些共性问题。在策略模式中,经常会出现这样一种情况,就是发现这一系列算法的实现上存在公共功能...

    Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现

    模板方法模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在C++这样的面向对象编程语言中。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的...

    设计模式之模板方法测试代码

    在这个场景下,"设计模式之模板方法测试代码"指的是一个用于验证模板方法模式实现的C++代码示例。 模板方法模式的核心思想是封装不变的部分,定义可变的行为。这种模式通常用于当有多个类实现了相同算法的不同部分...

    C++设计模式之模板方法模式(TemplateMethod)

    模板方法模式是面向对象设计模式中的一种,它属于行为模式,主要用来定义对象间的一系列操作顺序,而将一些步骤的实现延迟到子类中。这样可以使得子类不改变算法的结构即可重定义该算法的某些特定步骤,从而实现多态...

    设计模式之模板方法(Template)

    模板方法设计模式是一种行为设计模式,它...模板方法设计模式是设计模式中的基础模式之一,理解并正确使用它可以提高软件的灵活性、可维护性和扩展性。在实际开发中,我们应该根据需求灵活运用,以达到最佳的设计效果。

Global site tag (gtag.js) - Google Analytics