模板模式的简单使用

21 篇文章 0 订阅
19 篇文章 0 订阅

前言

定义一个操作的算法步骤,固化一个算法流程,子类按着自己的需求复写父类的部分方法,使得子类可以不改变固化的算法步骤,即可重新定义该过程的特定步骤。这个最熟悉的应该是Activity的生命周期,当然各种组件的生命周期都是模板模式的,这个就很容易理解了。

适用对象

1,多个过程逻辑基本相同。
2,重复的算法,可以提取核心作为模板,子类各抒己见。
3,很多时候我们要简化Activity或者其他类的逻辑,提取公用方法,比如我们Activity都要注册广播。

角色扮演

AbsTemplate:抽象类,固化算法步骤,或者说定义一套算法的框架。
ConcreteImpl:具体实现类,这个具体实现类是多个公用一套框架的对象。

Demo

这个就简单来一个排序过程吧,我们要完成一个排序过程,但至于怎么排序就让子类决定。
AbsTemplate

package com.demo.template;

import java.util.List;

/**
 * Created by italkbb on 2017/12/26.
 */

public abstract class AbsTemplate {
    // 抽象出一个排序过程
    abstract void sort(List<Integer> lists);

    // 展示排完的数据
    public void show(List<Integer>  lists){
        this.sort(lists);
        for (int i = 0; i < lists.size(); i++){
            System.out.printf(String.valueOf(lists.get(i)));
        }
    }

}

我们首先用冒泡排序来实现这个过程:

package com.demo.template;

import java.util.List;

/**
 * Created by italkbb on 2017/12/26.
 */

public class BubbleSort extends AbsTemplate {
    @Override
    void sort(List<Integer> lists) {
        for (int i = 0; i < lists.size() - 1; i++) {
            for (int j = 1; j < lists.size() - i; j++) {
                Integer temp;
                if ((lists.get(j - 1)).compareTo(lists.get(j)) > 0) {
                    temp = lists.get(j - 1);
                    lists.set((j - 1), lists.get(j));
                    lists.set(j, temp);
                }
            }
        }
    }
}

然后用系统的排序再实现一个:

package com.demo.template;

import java.util.Collections;
import java.util.List;

/**
 * Created by italkbb on 2017/12/26.
 */

public class SimpleSort extends AbsTemplate {
    @Override
    void sort(List<Integer> lists) {
        Collections.sort(lists);
    }
}

简单的模拟了一个模板模式,这个使用就很简单了,就不记录了。

后记

可能这个demo太过于简单,其实我们在开发中也这样,抽象各种步骤,比如我们这会儿的项目就是在fragment的页面方法抽象出来,让子类实现自己的view:

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mContext = this.getActivity();
        initView();
        initTitle();
        initData();
        initOnClickListener();
        ((BaseActivity) this.getActivity()).setCurrentVisiableFragment(this);
    }

这也是固化一个步骤优点就是封装了固有步骤,简化了代码量,提取了公用的代码,以便于日后维护。缺点就是刚入门的时候可能寻找架构的学习量多一些。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值