吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2065|回复: 5
收起左侧

[其他转载] 设计模式15 模板方法模式

[复制链接]
爱好学习 发表于 2018-11-16 10:37 来自手机
本帖最后由 wushaominkk 于 2018-11-18 15:21 编辑

非原创,转载于我朋友小菜鸟学Android,

设计模式15 模板方法模式

定义
关于怎么固定算法骨架。
简单举例
测试结果

定义

在一个方法中定义一个算法的骨架,而将一些步凑延迟到子类中去。模板方法可以使的子类在不改变算法结构的情况下,重新定义算法中的某些步骤。

关于怎么固定算法骨架。

将一定步骤的方法,按固定顺序排列,子类又不能修改,那就将方法排序调用后,用final修饰固定的方法。

简单举例

比如做一件事情,需要4个步骤,而这四个步骤又是有先后顺序的,我们为了不然子类去改变这个步凑,将4步封装起来。4个步骤的方法,用protected修饰。

[Java] 纯文本查看 复制代码
封装模板基类
public abstract class AbstractTemplate {

    /**
     * 固定模板,使用final
     */
    public final void templateMethod(){

        stepFirst();
        stepSecond();
        stepThird();
        stepForth();
    }

    /**
     * 第一步,子类有不同的实现, 需要子类实现
     */
    protected abstract void stepFirst();

    /**
     * 第2步,子类有不同的实现
     */
    protected abstract void stepSecond();

    /**
     * 第3步
     */
    protected void stepThird(){
        System.out.println("默认第3步");
    }

    /**
     * 第4步,子类也可以修改,不过有个默认的执行
     */
    protected void stepForth(){
        // 默认执行
        System.out.println("默认第4步");
    }
}
具体的模板实现类1
public class Work extends AbstractTemplate {

    @Override
    protected void stepFirst() {
        System.out.println("工作的第一步");
    }

    @Override
    protected void stepSecond() {
        System.out.println("工作的第二步");
    }
}
具体的模板实现类2
public class OtherWork extends AbstractTemplate {


    @Override
    protected void stepFirst() {
        System.out.println("另一工种的第一步");
    }

    @Override
    protected void stepSecond() {
        System.out.println("另一种工种的第2步");
    }

    @Override
    protected void stepThird() {
        System.out.println("另一种工种的第3步");
    }
}
测试代码
public class Test {

    public static void main(String[] args) {
        Work work = new Work();
        // 执行模板
        work.templateMethod();

        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>");

        OtherWork otherWork = new OtherWork();
        otherWork.templateMethod();

    }
}

测试结果

工作的第一步
工作的第二步
默认第3步
默认第4步
>>>>>>>>>>>>>>>>>>>>>>>
另一工种的第一步
另一种工种的第2步
另一种工种的第3步
默认第4步
Android 相关

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
1358582642 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
Luffy_Plus 发表于 2018-11-16 10:44
提示: 作者被禁止或删除 内容自动屏蔽
pikachu888 发表于 2018-11-16 11:34
1358582642 发表于 2018-11-16 21:03
Nothingsilky 发表于 2018-11-17 09:23
感谢分享
wushaominkk 发表于 2018-11-18 15:22
主题注意代码插入规范,已帮你编辑好,下次注意
【公告】发帖代码插入教程
https://www.52pojie.cn/thread-713042-1-1.html

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 23:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表