`
yangshen998
  • 浏览: 1246844 次
文章分类
社区版块
存档分类
最新评论

java 设计模式 学习笔记(9) 模板方法模式

 
阅读更多

模板方法模式:

定义一个操作中算法的骨架,将这个骨架中包含的其他方法延迟到子类去实现。模板方法模式使得子类可以在不改变一个算法的结构前提下重新定义该算法中的某些步骤的实现。

模板方法模式的用处 :

当不变的和可变的行为在子类的方法实现中混合成一起的时候,不变的行为就会在多个子类中重复出现。通过模板方法模式可以将这些不变的行为搬移到父类中去。

简单的理解就是:父类定义了一套行为流程,并且实现了这套行为流程中的某些公共的行为,而行为流程中那些不是公共的行为就交给子类去实现。

一般来说,先定义一个抽象类。该抽象类有一个方法,而该方法中又包含了一系列的操作步骤。不同的子类对这一系列的操作会根据自己的实际情况去实现。

1. 首先定义一个模板抽象类, 该模板定义了一个骨架方法,描述的是一个人从起床到去上班的过程。应该说大多数上班族都是符合这样的特征。不过具体到每个人,其每个步骤都有很多种实现方式,例如洗漱吃早饭的具体内容都是不一样的。

2. 定义一个模板类得子类,这个子类描述的某个人A 在早上的具体行为。A遵循模板类规定的一系列操作,但在具体实现上有自己的特点,需要实现3个抽象方法。

3. 同样再定义一个模板子类,它也继承了模板类的骨架方法,不过需要实现3个抽象方法。

从上面的代码可以看到,两个模板类的子类都实现了吃饭,洗脸,穿衣三个方法,但具体实现有自己的特点。需要注意的一点是,子类并没有也不应该去重写骨架方法,如果重写了骨架方法,那么父类定义的骨架被子类修改就达不到规范子类行为的目的。而模板方法模式最大的特点就是要求所有子类都必须按照父类给定的一个模板或者骨架去做事情。

4. 编写测试代码来验证模板方法模式实现的正确性

输出结果:

get up!

take a bath

take formal clothes

have a bottle of milk

go to work!

get up!

washFace

dress a new coat

i eat a bread and an egg!

go to work!

从输出结果看到,每个子类都遵循着 起床-> 洗漱-> 穿衣-> 吃饭 -> 去上班 的生活方式。 但是有的人喜欢早上洗澡,有的人只需要洗脸。有些人早饭吃包子,有些人早上吃油条。

通过实验结果,可以看到,模板方法模式将不需要变动的代码定义在父类,而免去了所有子类做重复代码的可能性。例如在本例子中的起床,去上班的行为都是在父类中实现的,子类就不需要重复这些代码。

分享到:
评论

相关推荐

    23种设计模式学习笔记及源码

    23种设计模式学习笔记及源码,全部原创 欢迎提出意见和建议

    java-design-patterns:Java 设计模式学习笔记

    Java Design PatternsJava 设计模式学习笔记,简单易懂,每个模式都有相应的代码示列,帮助学习理解。在线阅读地址:设计原则创建型模式作用:将创建与使用代码解耦结构型模式作用:将不同的功能代码解耦桥接模式...

    设计模式笔记(包含所有设计模式)个人总结提炼笔记

    3. 行为型模式:行为型模式关注对象之间的通信和协作,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。这些模式可以帮助...

    观看韩顺平学习整理java的笔记到异常

    抽象类--模板设计模式 9 接口 9 内部类 11 匿名内部类的使用(重要!!!!!!!) 13 成员内部类的使用 13 静态内部类的使用 14 枚举的二种实现方式 14 自定义类实现枚举 14 使用 enum 关键字实现枚举注意事项 15 enum 用...

    java-patterns:Java 23种基本的设计模式整料整理学习,责任链模式过滤器,工厂模式BeanFactory,观察者模式ContextListen等。结合Spring源码理解学习

    describe:设计模式学习笔记 逻辑结构图 代码结构图 设计模式简述 创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式,共七种:适配器模式,装饰器模式,代理模式,...

    java-design-patterns:java 学习模式

    Java Design Patterns 学习笔记 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    struts项目学习笔记

    Struts2 是一个非常优秀的MVC框架,基于Model2 设计模型 由传统Struts1和WebWork两个经典框架发展而来 Struts2框架=Struts2+XWork Strust2 核心功能 允许POJO(Plain Old Java Objects,简单javabean对象,没有继承,...

    hope::artist_palette: Java 学习笔记

    避坑笔记2021CICDCI/CD流程以及原理说明设计模式:策略模式单例模式工厂模式装饰器模式观察者模式适配器模式模板方法模式SpringBoot:SpringBoot(1):公共配置SpringBoot(2):generatorSpringBoot(3):docker部署...

    左程云leetcode-hjLearningNotes:hj学习笔记

    模板方法模式 适配器模式 代理模式 外观模式 组合模式 装饰模式 享元模式 桥接模式 Builder模式 状态模式 解释器模式 观察者模式 备忘录模式 迭代器模式 访问者模式 中介者模式 第二部分:JAVA 第三部分:Spring框架...

    java8源码-jcohy-study-sample:个人学习整理

    Ps:Java设计模式 [设计原则] [单一职责原则] [里氏替换原则] [依赖倒转原则] [接口隔离原则] [迪米特法则] [合成复用原则] 设计模式 创建型模式(5种) 结构型模式(7种) 关系型模式(11种) 适配器模式、装饰模式、代理...

    asp.net知识库

    VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...

    leetcode题库-JavaStudy:Java学习

    1、设计模式:模板方法 2、算法:学习动态规范,刷题最长回文数,最长公共子串,爬楼梯 3、kafka:kafka兼顾性能和高可用的实现逻辑 1、Springboot项目部署阿里云,Vue打包App 2、解决Ubuntu18设置mysql的sql_mode...

    Java毕业设计-基于springboot开发的校园资料分享平台-毕业论文(附毕设源代码).rar

    “基于Spring Boot开发的校园资料分享平台”这一毕业设计项目,不仅展示了Java编程语言的强大功能与灵活性,也充分体现了Spring Boot框架在快速构建Web应用方面的优势。此项目旨在构建一个便于校园内师生共享学习...

    安卓java读取网页源码-note:知识资源收集

    设计模式 LeetCode 面试题 博客和wiki收藏 代码实现 Android javaEE 前端 开源项目收集 JAVAEE 权限引擎 验证码 分布式框架 模板引擎 依赖注入 ORM 日志 搜索引擎 爬虫 数据校验 restful 消息中间件 响应式编程 热...

    安卓java读取网页源码-jcalaz-tip-copy:jcalaz-tip-copy

    设计模式 LeetCode 面试题 博客和wiki收藏 代码实现 Android javaEE 前端 开源项目收集 JAVAEE 权限引擎 验证码 分布式框架 模板引擎 依赖注入 ORM 日志 搜索引擎 爬虫 数据校验 restful 消息中间件 响应式编程 热...

    java版商城源码下载-my-collection:我的收藏(实用工具、网站等)

    :详细的介绍了各种设计模式 :Java、Python等技术 :在线学习、练习 Git 命令,就像打游戏一样 :以大图的方式介绍 Git 命令 :英语听力逐句精听,包含各种类型的听力材料 :在线背单词网站,页面简洁 实用网站 :...

Global site tag (gtag.js) - Google Analytics