Android开发之模板模式初探

Android开发之模板模式初探

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

      模板模式我认为在Android的开发中是最长用到的,基本是随处可见的,认识该模式,有助于我们对Android的源代码及框架有一个更深层次的认识。那什么是模板模式呢,模板模式就是定义一个基本框架,将当中的一些方法延迟到子类中运行实现。就比方我们去餐馆吃饭,基本步骤肯定为找到座位,点菜,上菜,吃饭,买单五个过程,当中点菜这个过程是可变的,我们点的菜可多可少,其它都是固定的,那么我们就能够写在一个固定的抽象类里形成一个基本框架,我们的子类继承该抽象类,对当中可变的方法进行复写。

     以下我们就来看一个样例。

/*
 * 抽象基类,为全部子类提供一个算法框架
 * 
 * 提神饮料
 */
public abstract class RefreshBeverage {

	/*
	 * 制备饮料的模板方法
	 * 封装了全部子类共同遵循的算法框架
	 */
	public final void prepareBeverageTemplate(){
		//步骤1 将水煮沸
		boilWater();
		//步骤2 泡制饮料
		brew();
		//步骤3 将饮料倒入杯中
		pourInCup();
		if(isCustomerWantsCondiments()){
			//步骤4 增加调味料
			addCondiments();
		}
	}

	/*
	 * Hook, 钩子函数,提供一个默认或空的实现
	 * 详细的子类能够自行决定是否挂钩以及怎样挂钩
	 * 询问用户是否增加调料
	 */
	 protected boolean isCustomerWantsCondiments() {
		return true;
	}

	/*
	 * 基本方法,将水煮沸
	 */
	private void boilWater() {
		System.out.println("将水煮沸");
	}
	
	/*
	 * 基本方法,将饮料倒入杯中
	 */
	private void pourInCup() {
		System.out.println("将饮料倒入杯中");
	}
	
	/*
	 * 抽象的基本方法,泡制饮料
	 */
	protected abstract void brew();
	
	
	/*
	 * 抽象的基本方法, 增加调味料
	 */
	protected abstract void addCondiments();
	
	
}


     我们定义了一个制备饮料的模板类,当中我们一定要注意prepareBeverageTemplate()方法的keyword一定为final,保证子类仅仅能改动可见的方法,保证模板框架的稳定,须要子类实现的方法定义为Protected属性而且为一个抽象类,由子类来对其自由发挥,就像我们Android每个类一般都会继承Activity类,复写当中的oncreate()方法一样,其属性也为protected.不想在子类可见的方法,我们需将其定位为private属性而且写好方法体。

     我们还能够发现我们在当中定义了一个isCustomerWantsCondiments()方法,这种方法就是hook钩子,增加模板框架的灵活性,该方法能够在子类中重写,以此来推断是否须要运行某个方法。

public class Tea extends RefreshBeverage {

	@Override
	protected void brew() {
		System.out.println("用80度的热水浸泡茶叶5分钟");
	}

	@Override
	protected void addCondiments() {
		System.out.println("增加柠檬");
	}

	@Override
	/*
	 * 子类通过覆盖的形式选择挂载钩子函数
	 * @see com.imooc.pattern.template.RefreshBeverage#isCustomerWantsCondiments()
	 */
	protected boolean isCustomerWantsCondiments(){
		return false;
	}
	
}

         我们写了一个泡茶的类,并将hook方法复写返回false, 取消了制备饮料的第四步。

         那么我们什么时候须要使用模板类呢?

         (1)算法或操作遵循类似的逻辑时

         (2)重构时(把同样的代码抽入到父类中),提高程序的复用性

         (3)重要复杂的算法,核心算法设计为模板算法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118090.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 华为静态路由配置[通俗易懂]

    华为静态路由配置[通俗易懂]静态路由静态路由是由管理员手动配置和管理的路由,静态路由配置简单,因此,被广泛应用于结构简单网络中,静态路由还可以实现负载均衡与路由备份。拓扑PC1位于192.168.1.0网段,它的IP是192.168.1.2,网关是192.168.1.1,掩码255.255.255.0。PC2位于192.168.2.0网段,它的IP是192.168.2.2,网关是192.168.2.1,掩码255….

    2022年9月25日
    2
  • pycharm语法提示_python怎么调用自己的函数

    pycharm语法提示_python怎么调用自己的函数参考博客:https://www.cnblogs.com/wendj/archive/2018/09/21/9685012.html第三步:鼠标放到函数名,按住ctrl即可查看

    2022年8月25日
    7
  • vue 引用mockjs 模拟真实的数据

    vue 引用mockjs 模拟真实的数据vue mockjs 模拟数据 实现前后端分离开发在项目中尝试了 mockjs mock 数据 实现前后端分离开发 关于 mockjs 官网描述的是 1 前后端分离 2 不需要修改既有代码 就可以拦截 Ajax 请求 返回模拟的响应数据 3 数据类型丰富 4 通过随机数据 模拟各种场景 等等优点 总结起来就是在后端接口没有开发完成之前 前端可以用已有的接口文档 在真实的请求上拦

    2025年8月26日
    0
  • c++ 常量表达式_c语言所有函数

    c++ 常量表达式_c语言所有函数constexpr修饰函数。普通函数/类成员函数。1.函数必须要有返回值,并且return返回的表达式必须是常量表达式。错误代码如下:#include<iostream>usingnamespacestd;//error不是常量表达式函数constexprvoidfunc1(){ inta=200; cout<<a<<endl;}//error不是常量表达式函数因为a是变量,不是常量constexprint

    2022年9月27日
    2
  • pycharm2021.8.2激活码_最新在线免费激活

    (pycharm2021.8.2激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSWQi…

    2022年3月25日
    81
  • Gmapping建图

    Gmapping建图Gmapping实战前文中,我们总共做了以下几件事:完成了基于ros小车框架安装。完成了小车下位机的安装。完成了上位机安装,并连接到ros系统,可以发布odom话题,使用键盘控制gmapping数据集测试。激光雷达选型与安装。接下来我们来完成使用gmapping的建图与导航工作。首先下载安装激光雷达的驱动程序,当然只针对我买的这一款,不是做广告,这家的技术售后简直就是垃圾,唯一…

    2022年6月25日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号