博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
行为型模式:模板方法
阅读量:3965 次
发布时间:2019-05-24

本文共 2963 字,大约阅读时间需要 9 分钟。

LieBrother公众号原文:

景

十一大行为型模式之一:模板方法。

简介

姓名 :模板方法

英文名 :Template Method Pattern

价值观 :在我的掌控下,任由你发挥

个人介绍

Define the skeleton of an algorithm in an operation,deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.

定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
(来自《设计模式之禅》)

解释一下上面的介绍,意思是由父类来定义框架,让子类来具体实现。

你要的故事

刚过完春节,大家都买新鞋了么?今天要讲的故事和鞋子有关。一双鞋子从表面来看,由鞋底、鞋垫、鞋面、鞋带组成,同一系列的鞋子这几个部分都是一样的,用同样的材料做出来,不同系列的鞋子就大相径庭了。根据模板方法模式,组装一双鞋子的制造过程可以归并为固定的框架,至于用什么材料,那由每个系列的鞋子去具体实现。我们先看定义组装鞋子的框架代码。

/** * 定义鞋子制造的工序框架 */abstract class ShoeInstallTemplate {    public abstract void installSole();    public abstract void installInsole();    public abstract void installVamp();    public abstract void installShoelace();    public void installShot(){        System.out.println("组装一双鞋,步骤如下:");        // 组装鞋底        installSole();        // 组装鞋垫        installInsole();        // 组装鞋面        installVamp();        // 组装鞋带        installShoelace();    }}

定义了一个组装鞋子框架的抽象类 ShoeInstallTemplate,里面有 4 个工序未具体实现,由鞋子制造商去实现,因为只有鞋子制造商才知道鞋子要用什么材料来做。

下面举 2 个比较出名的鞋子:Adidas 的 Boost 系列和 Nike 的 Jordan 系列。下面分别实现这 2 个系列鞋子的制造代码。

/** * Adidas Boost 鞋制造 */class AdidasBoostShoeInstall extends ShoeInstallTemplate {    @Override    public void installSole() {        System.out.println("组装白色 Boost 鞋底");    }    @Override    public void installInsole() {        System.out.println("组装黑色 Boost 鞋垫");    }    @Override    public void installVamp() {        System.out.println("组装黑色 Boost 鞋面");    }    @Override    public void installShoelace() {        System.out.println("组装黑色 Boost 鞋带");    }}/** * Nike Jordan 鞋制造 */class NikeJordanShoeInstall extends ShoeInstallTemplate {    @Override    public void installSole() {        System.out.println("组装黑色 Jordan 鞋底");    }    @Override    public void installInsole() {        System.out.println("组装黑色 Jordan 鞋垫");    }    @Override    public void installVamp() {        System.out.println("组装红色 Jordan 鞋面");    }    @Override    public void installShoelace() {        System.out.println("组装红色 Jordan 鞋带");    }}

实现了制造商制造鞋子的代码之后,我们通过代码测试怎么制造 Boost 和 Jordan 鞋子。

public class TemplateMethodTest {    public static void main(String[] args) {        ShoeInstallTemplate adidasBoost = new AdidasBoostShoeInstall();        adidasBoost.installShot();        ShoeInstallTemplate nikeJordan = new NikeJordanShoeInstall();        nikeJordan.installShot();    }}打印结果:组装一双鞋,步骤如下:组装白色 Boost 鞋底组装黑色 Boost 鞋垫组装黑色 Boost 鞋面组装黑色 Boost 鞋带组装一双鞋,步骤如下:组装黑色 Jordan 鞋底组装黑色 Jordan 鞋垫组装红色 Jordan 鞋面组装红色 Jordan 鞋带

模板方法模式就这么简单。是不是掌握了?

代码:

总结

模板方法是一个比较实用的模式,为什么说实用呢?举个现实的例子,Java 能有如今的发展,离不开各大开源框架,比如 Dubbo,有看过源码的朋友就知道,里面大量代码运用了模板方法设计模式,为什么 Dubbo 可以支持很多种注册中心?其实本质就是用了模板方法设计模式,使得可以扩展多种注册中心。掌握好模板方法,对读源码有非常大的帮助,很多人包括我在内,在刚开始阅读源码的时候,有相当长的一段时间怀疑人生,怎么这些代码那么绕?调来调去的。当你了解了常用的设计模式之后,看源代码就可以直截了当的知道是用什么设计模式,为什么用这个设计模式?原来是为了什么什么。。。有了这层思考,就像有一条线将以前散落在各地的知识点连接起来,成了可以推敲的知识

参考资料:《大话设计模式》、《设计模式之禅》

推荐阅读:

转载地址:http://iqkki.baihongyu.com/

你可能感兴趣的文章
一.JavaScript 基础
查看>>
7.ECMAScript 继承
查看>>
HTML DOM
查看>>
AJAX 基础
查看>>
JSON 基础
查看>>
J2EE监听器Listener接口大全[转]
查看>>
cookie、session、sessionid 与jsessionid[转]
查看>>
常见Oracle HINT的用法
查看>>
JAVA中各类CACHE机制实现的比较 [转]
查看>>
PL/SQL Developer技巧
查看>>
3-python之PyCharm如何新建项目
查看>>
15-python之while循环嵌套应用场景
查看>>
17-python之for循环
查看>>
18-python之while循环,for循环与else的配合
查看>>
19-python之字符串简单介绍
查看>>
20-python之切片详细介绍
查看>>
P24-c++类继承-01详细的例子演示继承的好处
查看>>
P8-c++对象和类-01默认构造函数详解
查看>>
P1-c++函数详解-01函数的默认参数
查看>>
P3-c++函数详解-03函数模板详细介绍
查看>>