num04---模板方法模式
最近看书又遇到模板方法模式,具体是在同步器(AQS)的内容上。就顺便再来回顾下。
同步器AbstractQueuedSynchronizer(AQS)是一个抽象类。其中定义了 基本方法 和 模板方法。
-- 基本方法都是抽象方法,需要在子类中去具体实现。
-- 模板方法已经有具体的实现,模板方法中会对基本方法进行顺序调用。
综上,模板方法模式:在类中的模板方法方法中,对类中的其他基本方法进行定义好的规则、顺序进行调用执行。
光看文字有些绕,还是看代码会清晰一些。
public abstract class Parent {
//基本方法
public abstract void get();
public abstract void set();
//模板方法,已经定义了基本方法的调用顺序规则
public void excute() {
get();
set();
}
}
public class Child1 extends Parent{
@Override
public void get() {
System.out.println("get-child1");
}
@Override
public void set() {
System.out.println("set-child1");
}
}
public class Child2 extends Parent{
@Override
public void get() {
System.out.println("get-child2");
}
@Override
public void set() {
System.out.println("set-child2");
}
}
=====================================
理论概括一下:【复制来源:参考文章】
作者:我是皮皮甜大王
链接:https://www.jianshu.com/p/f8e48d0944c8
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
(一)什么是模板方法模式
一个操作中的算法框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构就可以定义该算法的某些特定步骤。有些抽象,等下举个例子会更明白。
(二)模板方法模式的使用:抽象类抽象子类共性+子类继承重写抽象方法
(三)模板方法模式的优点
1)提取公共代码可以使核心代码变少,放在一起方便维护,想修改某个方法只需要修改一处就可以了
2)行为由父类控制,子类实现
自己的理解父类定义你有哪些行为,子类具体实现,其具体实现不关父类的事。就像小时候老妈喊你写完家庭作业,但是你具体怎么做并不会管,你是先写语文呢,还是先写数学呢
3)封装不变部分,扩展可变部分
(四)使用场景
1)多个子类有共有方法,并且逻辑基本相同时
2)重构时,把相同的代码抽取到父类中,通过钩子函数约(钩子函数自我理解就是一个返回值为boolean的方法,通过返回值来控制其他行为,在抽象类中可以有默认实现)约束其行为
=====================================================
num04---模板方法模式的更多相关文章
- 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)
今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知 ...
- 设计模式(十四)模板方法模式(Template Pattern)
一.引言 提到模板,大家肯定不免想到生活中的“简历模板”.“论文模板”.“Word中模版文件”等,在现实生活中,模板的概念就是——有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它,例如简 ...
- C#设计模式-模板方法模式
提到模板,大家肯定不免想到生活中的“简历模板”.“论文模板”.“Word中模版文件”等,在现实生活中,模板的概念就是——有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它,例如简历模板,下 ...
- C#设计模式系列:模板方法模式(Template Method)
你去银行取款的时候,银行会给你一张取款单,这张取款单就是一个模板,它把公共的内容提取到模板中,只留下部分让用户来填写.在软件系统中,将多个类的共有内容提取到一个模板中的思想便是模板方法模式的思想. 模 ...
- 编程模式之模板方法模式(Template Method)
模板方法模式由两个角色组成:父类角色,子类角色. 父类角色:提供模板. 子类角色:为父类模板提供实现. 类图: JAVA代码: AbstractClass.java package com.templ ...
- 轻松掌握:JavaScript模板方法模式
模板方法模式 假如我们有一些对象,各个对象之间有一些相同的行为,也有一些不同的行为,这时,我们就可以用模板方法模式来把相同的部分上移到它们的共同原型中(父类),而将不同的部分留给自己各自重新实现. 模 ...
- java设计模式 模板方法模式Template Method
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.毫无疑问,设计模式于己 ...
- java设计模式之模板方法模式
模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.通俗的说的就是有很多相同的步骤的,在某一些地方可能有一些差 ...
- 【Java】模板方法模式
今天介绍的是模板方法模式~ 模板方法模式,由父类定制总体的框架,具体的细节由子类实现. 一般来说,模板方法中有3类方法: 抽象方法,父类声明方法待子类具体实现.比如例子的validate.save.u ...
- 模板方法模式(Template Method)
一.引言 提到模板,大家肯定不免想到生活中的“简历模板”.“论文模板”.“Word中模版文件”等,在现实生活中,模板的概念就是——有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它,例如简 ...
随机推荐
- Don’t Repeat Yourself,Repeat Yourself
Don't Repeat Yourself,Repeat Yourself Don't repeat yourself (DRY, or sometimes do not repeat yoursel ...
- InnoDB与MyISAM的区别(高性能MySQL笔记)
1.InnoDB支持事务,MyISAM不支持,也就是说MyISAM不支持事务回滚操作,这个功能可能是致命的 2.InnoDB支持行锁,MyISAM只支持表锁,不过InnoDB的行锁是建立在索引之上的, ...
- 看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟.醍醐灌顶的感觉. 最初在有 ...
- HTTPS中的TLS
1. SSL 与 TLS SSL:(Secure Socket Layer) 安全套接层,于 1994 年由网景公司设计,并于 1995 年发布了 3.0 版本TLS:(Transport Layer ...
- MySQL快速回顾:计算字段与函数
9.1 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式.比如: 如果想要在一个字段中既显示公司名,又显示公式的地址,但这两个信息一般包含在不同的表列中. 城市.州和邮政编码存储在不同的列 ...
- Broken Necklace 坏掉的项链 USACO 模拟(易错)
1004: 1.1.4Broken Necklace 坏掉的项链 时间限制: 1 Sec 内存限制: 128 MB提交: 11 解决: 9[提交] [状态] [讨论版] [命题人:外部导入] 题目 ...
- 【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分
为了更好的完善Magicodes.IE,春节期间我们会进行一次大的重构.由于精力有限,急缺文档和翻译(将文档翻译为英文文档)支持,诚邀各位加入.同时在功能方便也做了相关规划,有兴趣的朋友可以参与提交P ...
- restframework 视图
重要知识点 as_view()获取的是view方法名,当url配版成功,执行view方法 一.逻辑封装(mixins, generics) path('author/', views.AuthorVi ...
- xLua下使用lua-protobuf
本文发表于程序员刘宇的博客,转载请注明来源:https://www.cnblogs.com/xiaohutu/p/12168781.html protobuf作为一种通用套接字格式,各种插件里,最本质 ...
- python文件与输入输出
注:本文档是学习<Python核心编程(第二版)>时的整理. 1.文件对象 文件对象不仅可以用来访问普通的磁盘文件,也可以访问任何其他类型抽象层面上的"文件".一旦设置 ...