设计模式-模板方法

模板方法(TemplateMethod)

1.什么是模板方法?

在现实生活中,很多事情都包含几个固定步骤,如考试,考试的步骤大致可以分为:拿考卷->作答->交卷。其中拿考卷和交卷的动作
几乎一致,不同的是我们每次考试作答的内容。

在我们写代码的时候,有时候也会遇到类似的情况。就是某个操作需要实现多个步骤,但是其中几个步骤都是固定不变的,只是有些
步骤会变化,这时候,为了提高代码的复用性和系统的灵活性,我们就可以使用---模板方法。

2.模板方法模式定义:

定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该
算法的某些特定步骤。

3.模板方法结构

  1. 由上图:模板方法定义了一个抽象类和具体子类,抽象类中定义的每一个operation都是一个操作步骤,在templateMethod()
    方法中,定义执行上述步骤的顺序等,子类可以通过继承该抽象类,并重新特定步骤实现子类独有的功能。

4.钩子方法

作用:一个钩子方法由一个抽象类或具体类声明并实现,而其子类可能会加以扩展。

代码:
AbstractPresellTemplate.java

/**
 * 抽象模板类
 */
public abstract class AbstractPresellTemplate {
    public final void execute() {
        preDoSomething();
        abstractMethod();
        hookMethod();
        afterDoSomething();
    }

    private void preDoSomething() {
        System.out.println("前置通用业务...");
        System.out.println("--------------");
    }

    private void afterDoSomething() {
        System.out.println("后置置通用业务...");
    }

    /**
     * 钩子方法,为子类模板提供额外的业务需求入口
     */
    public void hookMethod() {

    }

    /**
     * 子类重写方法
     */
    public abstract void abstractMethod();
}

ActivityA.java

public class ActivityA extends AbstractPresellTemplate {

    @Override
    public void abstractMethod() {
        System.out.println("活动A业务");
        System.out.println("--------------");
    }

    @Override
    public void hookMethod() {
        System.out.println("活动A重写钩子方法");
        System.out.println("--------------");
    }
}

ActivityB.java

public class ActivityB extends AbstractPresellTemplate {

    @Override
    public void abstractMethod() {
        System.out.println("活动B业务");
        System.out.println("--------------");
    }
}

参考:https://blog.csdn.net/lovelion/article/details/8299794

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值