前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式:模板方法

设计模式:模板方法

作者头像
用户1172465
发布2018-01-08 14:23:24
6000
发布2018-01-08 14:23:24
举报
文章被收录于专栏:everhad

模板方法

使用基类定义整体步骤,即若干方法的调用过程,将一些可变的步骤由子类去重写。这样就可以利用多态在不改变操作的整体结构下定制一些特殊细节。

代码解释

可以联想在线电子邮件和普通邮递的区别。 基类定义操作过程的整体结构:

代码语言:javascript
复制
abstract class BaseProcedure {
  public final void proceed() {
    step1();
    step2();
  }

  public abstract void step1();
  public abstract void step2();
}

子类根据需要定制某些步骤:

代码语言:javascript
复制
class OnlineProcedure extends BaseProcedure {

  @Override
  public void step1(
    //在线过程1
  )

  @Override
  public void step2() {
    //在线过程2
  }
}

案例

Activity

Activity类定义了生命周期的各种回调:

代码语言:javascript
复制
final void performCreate(Bundle icicle) {
  ...
  onCreate(icicle)
  ...
}

final void performStart() {
  ...
  onStart();
  ...
}
final void performResume() {
  ...
  onResume();
  ...
}

protected void onCreate(@Nullable Bundle savedInstanceState);
protected void onStart();
protected void onResume();

perform**()系列方法分别调用了对应的on**()方法,目标方法在调用子类重写的方法时通常做了很多额外准备工作和后续工作。

View绘制

view绘制的整体过程:三大阶段是固定的,子类完成各个部分细节。 同Activity一样:

代码语言:javascript
复制
public final void measure(int widthMeasureSpec, int heightMeasureSpec) {
  ...
  onMeasure(widthMeasureSpec, heightMeasureSpec);
  ...
}

public void layout(int l, int t, int r, int b) {
  ...
  onLayout(changed, l, t, r, b);
  ...
}

public void draw(Canvas canvas) {
  ...
  // Step 3, draw the content
  if (!dirtyOpaque) onDraw(canvas);
  ...
}

ViewGroup事件分发

ViewGroup在方法dispatchTouchEvent()中定义了事件分发机制的整体结构。 子类需要重写以下方法来定制事件处理过程:

代码语言:javascript
复制
public boolean onInterceptTouchEvent(MotionEvent ev);
public boolean onTouchEvent(MotionEvent event);

用途

把公共不变的行为抽取到基类。 一方面是基类代码复用,另一方面,基类定义了整体结构,而细节只能是子类去完成的操作。 模板方法强调抽象过程的不变性,某些细节的可变性。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-01-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模板方法
  • 代码解释
  • 案例
    • Activity
      • View绘制
        • ViewGroup事件分发
        • 用途
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档