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

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

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 可以支持很多种注册中心?其实本质就是用了模板方法设计模式,使得可以扩展多种注册中心。掌握好模板方法,对读源码有非常大的帮助,很多人包括我在内,在刚开始阅读源码的时候,有相当长的一段时间怀疑人生,怎么这些代码那么绕?调来调去的。当你了解了常用的设计模式之后,看源代码就可以直截了当的知道是用什么设计模式,为什么用这个设计模式?原来是为了什么什么。。。有了这层思考,就像有一条线将以前散落在各地的知识点连接起来,成了可以推敲的知识

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

推荐阅读:

希望文章对您有所帮助,设计模式系列会持续更新,感兴趣的同学可以关注公众号:LieBrother,第一时间获取文章推送阅读,也可以一起交流,交个朋友。

公众号

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

你可能感兴趣的文章
android复杂布局的一点思路
查看>>
Awesome Python
查看>>
java web简单权限管理设计
查看>>
Google Analytics
查看>>
【转】什么是云计算
查看>>
MySQL 5.7及以上解压缩版本配置安装
查看>>
Extjs4.0 Chart属性中文解释
查看>>
PHP单例模式的实现
查看>>
httpClient post 数据传输和处理
查看>>
newLISP你也行 --- 字符串
查看>>
【译】Swift 2.0 下面向协议的MVVM架构实践
查看>>
html5拖拽
查看>>
Android工具HierarchyViewer 代码导读(2) -- 建立Eclipse调试环境
查看>>
GC配置对性能的帮助
查看>>
java list按时间倒序、首字母排序
查看>>
hls之m3u8、ts流格式详解
查看>>
中国有望成为全球最大3D打印市场
查看>>
ecshop在其他的页面调用首页的flash主广告的方法
查看>>
lamp安装
查看>>
BDDynamicGridViewController
查看>>