模板设计模式

目录

一、介绍

二、示例


一、介绍

什么是模版方法
1.定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成。
模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2.模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术,没有关联关系。 因此,在模板方法模式的类结构图中,只有继承关系。

核心设计要点:
AbstractClass : 抽象类,定义并实现一个模板方法。这个模板方法定义了算法的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类去实现
ConcreteClass : 实现实现父类所定义的一个或多个抽象方法。

模版方法应用场景
1.比如聚合支付平台中提交订单支付

模式模式优缺点
1.)优点
模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。子类实现算法的某些细节,有助于算法的扩展。通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。
2.)缺点
每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
3.)适用场景
在某些类的算法中,用了相同的方法,造成代码的重复。控制子类扩展,子类必须遵守算法规则。

二、示例

package com.example.designmode.demo.template;

import com.example.designmode.dto.OrderDTO;
import lombok.extern.slf4j.Slf4j;



@Slf4j
public abstract class AbstractPayTemplate {

    public String submitOrder(OrderDTO orderDTO) {
        //1.参数校验
        checkParams(orderDTO);

        //2.签名校验
        verifySignature(orderDTO);

        //3.调用支付接口
        String result = pay(orderDTO);

        //4.修改订单状态
        updateOrder(orderDTO);
        return "";
    }

    protected abstract String pay(OrderDTO orderDTO);

    public void updateOrder(OrderDTO orderDTO) {
        log.info("updateOrder start,支付方式:{}", orderDTO.getPayType());
    }

    public void verifySignature(OrderDTO orderDTO) {
        log.info("verifySignature start,支付方式:{}", orderDTO.getPayType());
    }

    public void checkParams(OrderDTO orderDTO) {
        log.info("checkParams start,支付方式:{}", orderDTO.getPayType());
    }
}
package com.example.designmode.demo.template;

import com.example.designmode.dto.OrderDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;


@Component
@Slf4j
public class AliPayTemplate extends AbstractPayTemplate {

    @Override
    protected String pay(OrderDTO orderDTO) {
        log.info("支付宝支付开始");
        return null;
    }
}
package com.example.designmode.demo.template;

import com.example.designmode.dto.OrderDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;


@Component
@Slf4j
public class UnionPayTemplate extends AbstractPayTemplate {

    @Override
    protected String pay(OrderDTO orderDTO) {
        log.info("银联支付开始");
        return null;
    }
}
package com.example.designmode.demo.template;

import com.example.designmode.dto.OrderDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;


@Component
@Slf4j
public class WeChatPayTemplate extends AbstractPayTemplate {

    @Override
    protected String pay(OrderDTO orderDTO) {
        log.info("微信支付开始");
        return null;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的模板设计模式是一种行为型设计模式,它允许我们定义一个算法的骨架,但允许子类为其中的一些步骤提供具体的实现。 模板设计模式由两个主要组件组成: 1. 抽象类(Abstract Class):它定义了一个模板方法,该方法提供了算法的骨架。它可以包含一个或多个抽象方法,这些方法由子类来实现。 2. 具体类(Concrete Class):它是抽象类的子类,负责实现抽象方法。 以下是一个示例代码来说明模板设计模式的用法: ```java public abstract class AbstractClass { // 模板方法 public final void templateMethod() { // 步骤一 stepOne(); // 步骤二 stepTwo(); // 步骤三 stepThree(); } // 抽象方法,由子类实现 protected abstract void stepOne(); protected abstract void stepTwo(); // 钩子方法,子类可以选择性地覆盖 protected void stepThree() { // 默认实现 } } public class ConcreteClass extends AbstractClass { @Override protected void stepOne() { // 具体实现步骤一 } @Override protected void stepTwo() { // 具体实现步骤二 } } ``` 在上面的示例中,`AbstractClass` 是抽象类,它定义了一个名为 `templateMethod()` 的模板方法,并声明了三个抽象方法 `stepOne()`、`stepTwo()` 和 `stepThree()`。`ConcreteClass` 是具体类,它继承了 `AbstractClass` 并实现了抽象方法。 通过使用模板设计模式,我们可以在抽象类中定义算法的骨架,而具体的实现可以由子类来完成。这种设计模式使得代码重用和扩展变得更加容易。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值