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

原文地址: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
个人分类: 设计模式
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭