模板方法模式

protected abstract void primitiveOperation1();

protected abstract void primitiveOperation2();

private void concreteOperation() {

//这里是公共不变的部分

}

}

public class ConcreteTemplate extends AbstractTemplate {

@Override

protected void primitiveOperation1() {

//子类实现算法中的具体步骤

}

@Override

protected void primitiveOperation2() {

//子类实现算法中的具体步骤

}

}

public class Client {

public static void main(String[] args) {

AbstractTemplate template = new ConcreteTemplate();

template.templateMethod();

}

}

模板方法的实现非常简单,看上去就是简单的继承。但是模板方法必须是由父类定义一系列步骤,由子类去实现特定步骤。一系列步骤的方法被称为基本方法或者原语操作,需要由子类实现的方法都是protected的,这符合迪米特法则,外部知道的越少越好。模板方法可以说在实际当中是经常被用到的,不过多数情况下我们并没有感觉到。

模板方法中的钩子方法

模板方法的一个重要应用就是钩子方法(Hook Method)的应用,钩子方法给你提供了更加灵活的方式,使得你可以选择需要或者不需要执行算法步骤当中的某些步骤。

示例代码:

public abstract class AbstractTemplate {

/**

  • 模板方法, 定义一个算法骨架,包含一系列算法步骤

*/

public void templateMethod(){

//算法步骤由一些基本方法组成, 某些方法可以在子类中实现

primitiveOperation1();

primitiveOperation2();

//根据钩子方法的返回结果决定是否执行下面的步骤

if (hookMethod()) {

concreteOperation();

}

}

protected abstract void primitiveOperation1();

protected abstract void primitiveOperation2();

private void concreteOperation() {

//这里是公共不变的部分

}

/**

  • 钩子方法, 这里提供默认实现

*/

protected boolean hookMethod() {

return true;

}

}

public class ConcreteTemplate extends AbstractTemplate {

@Override

protected void primitiveOperation1() {

//子类实现算法中的具体步骤

}

@Override

protected void primitiveOperation2() {

//子类实现算法中的具体步骤

}

@Override

protected boolean hookMethod() {

//返回false, 那么将不会执行父类中的某些特定步骤

return false;

}

}

可以看到,子类中可以选择覆写hookMethod()改变返回值来达到控制是否执行特定步骤的目的,甚至,如果你需要,你都可以用钩子函数控制它们的执行顺序。这里的钩子函数hookMethod()在基类中提供了默认实现,返回true, 当然你也可以将钩子函数完全定义成abstract的,指定必须由子类来实现它。这要根据你的实际需求来,看你的基类需不需要默认的实现。

好莱坞原则

别调用我们,我们会调用你。

(Don’t call me, I will call you! 别打电话给我,我会打电话给你! )

这个原则是在《HeadFirst设计模式》中提到出的,感觉非常有趣,它形象的描述了模板方法的核心思想。

好莱坞原则可以给我们一种防止“依赖腐败”的方法。当高层组件依赖低层组件,而低层组件又依倾高层组件,而高层组件又依赖边侧组件,而边侧组件又依赖低层组件时,依赖腐败就发生了。在这种情况下,没有人可以轻易地搞懂系统是如何设计的。

在好莱坞原则之下,我们允许低层组件将自己挂钩到系统上,但是高层组件会决定什么时候和怎样使用这些低层组件。换句话说,高层组件对待低层组件的方式是“别调用我们,我们会调用你”。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

尾声

如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

这里,笔者分享一份从架构哲学的层面来剖析的视频及资料给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

Android进阶学习资料库

一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!

大厂面试真题

PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

《2019-2021字节跳动Android面试历年真题解析》

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

见算法题汇总。)

[外链图片转存中…(img-C9NgWeOw-1713674781670)]

《2019-2021字节跳动Android面试历年真题解析》

[外链图片转存中…(img-tWa2eZCv-1713674781672)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 29
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值