Android设计模式系列--模板方法模式

认识到模板方法的这种思想,父类可以让未知的子类去做它本身可能完成的不好或者根本完成不了的事情,对框架学习大有帮助。

本文以View中的draw方法为例,展开分析。

模板方法,TemplateMethod,光是学习这个模式,就会对你产生长远影响的一个模式。

1.意图

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

热门词汇:骨架步骤 结构 延迟到子类

2.结构

定义了几个步骤1,2,3等,在模板方法中按照一定的结构顺序执行这些步骤。父类的方法可以有缺省实现,也可以是一个空实现,即所谓的钩子操作。

结合实际情况,我们画出View中draw方法涉及到的几个步骤方法如下:

学习模板方法对于我们了解框架的基类实现,生命周期和流程控制非常有帮助,我觉得是务必要掌握的一个模式。

3.代码

public class View{

/**

  • 钩子操作,空实现

*/

protected void onDraw(Canvas canvas) {

}

/**

*钩子操作,空实现

*/

protected void dispatch
Draw(Canvas canvas) {

}

//算法骨架

public void draw(Canvas canvas) {

if (!verticalEdges && !horizontalEdges) {

// 步骤1

if (!dirtyOpaque) onDraw(canvas);

// 步骤2

dispatchDraw(canvas);

// 步骤3

onDrawScrollBars(canvas);

return;

}

}

//… …

}

我们看看系统组件TextView的实现:

public class TextView{

@Override

protected void onDraw(Canvas canvas) {

//大量自定义实现代码

}

}

如果我们自定义View的话,我们一般也是重写onDraw方法即可:

public class MyView extends View {

public MyView(Context context) {

super(context);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

}

@Override

protected void dispatchDraw(Canvas canvas) {

super.dispatchDraw(canvas);

}

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取
也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**

[外链图片转存中…(img-QJAoO5EJ-1719021240767)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/732276.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SwiftUI 6.0(iOS 18)ScrollView 全新的滚动位置(ScrollPosition)揭秘

概览 在只有方寸之间大小的手持设备上要想体面的向用户展示海量信息,滚动视图(ScrollView)无疑是绝佳的“东牀之选”。 在 SwiftUI 历史的长河中,总觉得苹果对于 ScrollView 视图功能的升级是在“挤牙膏”。这不,在本…

“一站式企业服务平台”的功能架构

为提升区域营商环境,为促进区域经济发展,实现资源高效配置,全国各区域政府及产业园区都越来越重视如何创新企业服务机制、提升企业服务水平,来保障区域内的企业稳定及帮扶企业高质量的发展。随着近年来大数据、人工智能等新一代信…

多线程环境下 System.out.println 导致死锁问题分析

背景 一个文件采集系统,使用了多线程递归采集指定目录下的文件,并为每个目录创建一个线程去采集。 这个应用每隔几天就出现罢工情况,查看进程还在,堆内存空间还很充足,就是导出堆栈时,发现几乎所有的采集…

Docker:安装RediSearch全文搜索

1、简述 在本文中,我们将介绍如何使用Docker快速、简便地安装RediSearch,Redis的全文搜索模块。RediSearch提供了高效的全文搜索功能,通过Docker安装,可以轻松地在任何环境中部署和管理RediSearch。 官网地址:https:/…

欧洲杯数据控@20240621

点击标题下「蓝色微信名」可快速关注 西班牙成为第二支晋级淘汰赛的球队。 今日积分榜, 今日射手榜, 今日助攻榜, 本届欧洲杯相关文章, 《欧洲杯赛况20240621》 《欧洲杯数据控20240620》 《欧洲杯赛况20240620》 《欧洲杯数据控2…

中霖教育怎么样?中级会计考试大纲哪里能看?

中霖教育怎么样?中级会计考试大纲哪里能看? 在准备中级会计职业资格考试时,考试大纲是至关重要的参考资料。考试大纲能够为考生提供考试覆盖范围和核心考点,从而有助于进行针对性的复习和学习,提高学习的效率。 中级会计考试大纲哪里能看…

大模型项目落地时,该如何估算模型所需GPU算力资源

近期公司有大模型项目落地。在前期沟通时,对于算力估算和采购方案许多小伙伴不太了解,在此对相关的算力估算和选择进行一些总结。 不喜欢过程的可以直接 跳到HF上提供的模型计算器 要估算大模型的所需的显卡算力,首先要了解大模型的参数基础知识。 大模型的规模、参数的理解…

Nature Climate Change | 气候变暖会造成未来全球干旱区面积扩张?

在气候变暖的情况下,旱地通常被预测将在全球范围内扩大,旱地包括以水资源有限、植被稀疏为特征的土地区域。然而,这种预测依赖于旱地的大气代用物,即干旱指数。最近的研究表明,干旱指数对陆地水循环的各种组成部分的预…

Java多线程基础知识-3

ReentrantLock: condition.await()方法之前必须调用lock.lock()代码获取同步监视器。类比: Object类中的wait()相当于Condition类中的await()Object类中wait(long timeout)相当于Condition类中await(long time, TimeUnit unit)方法Object类中notify()相…

看到vue3源码中的__tests__文件中有很多xxx.spec.ts文件,这些文件是干什么的

问: computed.spec.ts这是什么文件 回答: computed.spec.ts 是一个文件命名的示例,通常用于编写和运行针对计算机软件中"computed"模块的测试。在这种情况下,.ts 扩展名表明这是一个 TypeScript 文件,通常用于编写 Angular 或者…

共享购模式的全新解析与收益分析

在当下这个数字化时代,共享购模式以其独特的创新消费理念,为商家和消费者带来了前所未有的增值机会。这一模式不仅整合了商家的资源,还通过一系列机制确保了消费者与商家的共赢。 一、商家参与机制 商家想要加入这一平台,需要支付…

HTML静态网页成品作业(HTML+CSS+JS)——动漫斗罗大陆介绍网页(3个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,使用Javacsript代码实现图片轮播和tab切换,共有3个页面。 …

分流井设备的监测控制和智慧运维

分流井是一种用于将雨水和污水进行分离的设施,通常设置在雨水管和污水管的汇合处。它可以根据不同的情况,将雨水和污水分别排放到不同的管道中,从而实现雨污分流的目的。 以下是一些常见的分流井类型和工作原理: 1、智能分流井&a…

Echarts饼图-实现今日进度-动态图

效果预览 本次实现的是一个饼图,蓝色科技背景色,星球转动效果 进度显示。 构建一个动态饼图,采用ECharts,背景为蓝色科技风,有星球转动效果。通过echarts.init初始化,设置图表尺寸和背景色,配…

高性能并行计算华为云实验二:WordCount算法实验

目录 一、实验目的 二、实验说明 三、实验过程 3.1 创建wordcount源码 3.1.1 实验说明 3.1.2 文件创建 3.2 Makefile文件创建与编译 3.3 主机配置文件建立与运行监测 3.3.1 主机配置文件建立 3.3.2 运行监测 三、实验结果与分析 4.1 实验结果 4.2 结果分析 4.2.1 …

昇思25天学习打卡营第3天|数据集 Dataset

1. 学习内容复盘 集数据 什么是数据集 数据是深度学习的基础,高质量的数据输入将在整个深度神经网络中起到积极作用。MindSpore提供基于Pipeline的数据引擎,通过数据集(Dataset)和数据变换(Transforms)实…

el-input-number 限制输入正整数

vue 页面 限制输入最小值为0 :min"0" <el-input-number v-model"scope.row.num" change"handleNumChange(scope)" keydown.enter.prevent style"width: 200px; " :min"0" />methods 里面限制输入的数字不为小数 使…

虚拟机没关机,电脑直接关机导致虚拟机无法使用

虚拟机没关机&#xff0c;电脑直接关机导致虚拟机无法使用 虚拟机未正常关机 无法打开虚拟机&#xff0c;移除 删除虚拟机目录下的该文件夹CentOSXX.vmx.lck&#xff08;或者重新命名&#xff09; 虚拟机正常打开

引擎霸屏推广9招带你驰骋市场战场-华媒舍

在现代市场竞争激烈的环境下&#xff0c;企业如何快速上车&#xff0c;脱颖而出&#xff0c;引擎霸屏推广成为了一种有效的市场推广手段。本文将为您介绍9招带您驰骋市场战场&#xff0c;让您的品牌广告在市场中快速传播。 一、选对渠道 选择合适的渠道是成功的关键。通过市场…

【C++LeetCode】【热题100】字母异位词分组【中等】-不同效率的题解【3】

题目&#xff1a; 暴力方法&#xff1a; class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {std::unordered_set<std::string> uniqueWord;//单词字符唯一化集合vector<vector<std::string>>…