设计模式入门:模板方法模式

原创 2018年04月16日 13:11:22

原文地址:http://te-amo.site/user/article/info/ARTICLE20180416010939282

模板方法模式就是定义一个算法的骨架,而将具体的算法延迟到子类中实现

场景:系统中有个创建资源的功能,分为四步:创建资源,上传到FTP服务器,保存到数据库,清理本地缓存。可以创建图片类型资源和文本类型资源,这样一来思考一下,其实就是创建的过程不同,而上传、保存,清理都是相同的算法处理,所以可以使用模板方法模式

结构

  • 抽象类:实现了模板方法,定义了算法的骨架。(ResourceTemplate)
  • 具体类:实现抽象类中的抽象方法,实现完整的算法。(ImgResource,TextResource)

设计

这里写图片描述

实现

代码地址:https://github.com/telundusiji/designpattern

资源创建的模板

@Slf4j
@Data
public abstract class ResourceTemplate {

    private String type;

    protected abstract void create();

    private final void uploadToFTP(){
        String serverHost = null;
        if("text".equals(type)){
            serverHost = "text.ftp.xxxx.com";
        }else if("img".equals(type)){
            serverHost = "img.ftp.xxxx.com";
        }else {
            throw new RuntimeException();
        }
        log.info("上传到FTP服务器({})成功!",serverHost);
    }

    private final void saveToDB(){
        log.info("保存到数据库成功!");
    }

    private final void clean(){
        log.info("清理本地缓存成功!");
    }

    public final void execute(){
        create();
        uploadToFTP();
        saveToDB();
        clean();
    }
}

图像类型资源创建

@Slf4j
public class ImgResource extends ResourceTemplate {
    @Override
    public void create() {
        setType();
        log.info("创建text资源!");
    }

    public void setType(){
        super.setType("img");
    }
}

文本类型资源创建

@Slf4j
public class TextResource extends ResourceTemplate {
    @Override
    public void create() {
        setType();
        log.info("创建text资源!");
    }

    public void setType(){
        super.setType("text");
    }

}

优缺点

优点:

  • 把不变的行为搬移到超类,变化的行为由子类自行扩展,有助于算法的扩展。

缺点:

  • 每个不同的实现都需要定义一个子类,当子类数量庞大时,如果超类的骨架需要变动时,子类都需要修改。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/telundusiji/article/details/79959302

大话设计模式—模板方法模式

在模板方法模式(TemplateMethod Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于...
  • lmb55
  • lmb55
  • 2016年03月26日 13:47
  • 1239

大话设计模式-----(三)工厂方法模式、原型模式、模板方法模式

工厂方法模式简单工厂模式是恩,按那个计算器来写的话,就是把运算符都具有的特性抽象出来作为父类。然后想添加运算类型,只需要对应的增加继承其运算符抽象类,然后添加自己的运算方法即可。但是要在工厂类中修改s...
  • qq_28295425
  • qq_28295425
  • 2017年03月19日 16:38
  • 620

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

模板方法:定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以再不改变一个算法的结构即可重新定义该算法的某些特定步骤。通过把不变的行为搬移到基类中,去除了子类的重复代码,提供了...
  • hailong0715
  • hailong0715
  • 2016年07月12日 15:05
  • 380

Java设计模式(四) 之 模板方法模式

源码均以JDK1.8作为参考1.定义: 定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的机构即可重定义该算法的某些特定步骤。2.解析: 通用类图:...
  • securitit
  • securitit
  • 2015年08月04日 09:16
  • 574

设计模式初探-模板方法模式

模板方法模式(TEMPLATE METHOD),用于定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,属...
  • qbg19881206
  • qbg19881206
  • 2014年02月16日 15:40
  • 1554

设计模式的应用场景(13)--模板方法模式

模板方法模式定义:定义一个算法的骨架,而将具体的算法延迟到子类中实现优点:灵活地实现具体的算法,满足用户灵活多变的需求。 缺点:算法骨架需要改变时需要修改抽象类。使用时机:当系统中算法的骨架是固定的时...
  • zhi_fu
  • zhi_fu
  • 2017年08月29日 19:55
  • 212

设计模式--六大原则与三种类型

一.6大原则 1.单一职责原则(Single Responsibility Principle) 定义:就一个类而言,应该仅有一个引起它变化的原因;     如果一个类承担的职责过多,就等于把这...
  • u013045552
  • u013045552
  • 2015年02月01日 21:13
  • 2548

设计模式之禅——模板方法模式&钩子方法

**模**板方法模式的定义:定义一个操作的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的框架即可重定义该算法的某些特定步骤。例子:做一个简单的悍马车的模型见UML图 一个抽象悍马...
  • TyroneRenekton
  • TyroneRenekton
  • 2016年08月21日 12:15
  • 5125

用代码和UML图化解设计模式之《模板方法模式》

今天学习了模板方法模式,让我恍然大悟,似曾相识。因为之前自己再设计项目的时候,就用到了这个模式。 当时还不知道自己用的是个模式,只是觉得非常好。很给力。所以,今天学起来很有感受。   这个模式就...
  • wallwind
  • wallwind
  • 2012年10月23日 00:46
  • 1970

模板方法设计模式扩展(Hook Method)

package Template_Method_Pattern;import java.util.Scanner;/** * 模板方法模式的扩展 * 钩子方法(Hook Method) * @a...
  • kongshuchen
  • kongshuchen
  • 2016年05月11日 22:16
  • 863
收藏助手
不良信息举报
您举报文章:设计模式入门:模板方法模式
举报原因:
原因补充:

(最多只允许输入30个字)