美文网首页
模板模式,也是解耦算法的吗?

模板模式,也是解耦算法的吗?

作者: 程就人生 | 来源:发表于2022-05-24 11:53 被阅读0次

模板模式,和算法有什么关系呢?

模板模式,在什么场景使用呢?


模板模式(Template Pattern),定义一个算法的骨架,把算法中的变与不变分离开来,封装不变的部分,扩展变的部分,又称模板方法模式。它是一种行为型模式。

业务场景:一次性实现一个算法不变的部分,并将可变的行为留给子类实现。

关键代码:在抽象类里,使用final修饰算法中不变的部分;可变的部分由子类重写。

下面看UML类图:


类图说明:图中有三个类,运动抽象类AbstractExercise,和两个继承者跑步类Run、游泳类Swim,它们不变的部分是运动exercise方法,运动之前的活动beforeExercise方法,运动之后的活动afterExercise方法,具体的运动doExercise方法。变化的是跑步类、游泳类中的具体的运动前、运动中、运动后的具体实现。类图中只有一种关系:继承。

下面看代码实现:

1.运动抽象类;

/**
 * 1.运动抽象类
 * @author 程就人生
 * @Date
 */
public abstract class AbstractExercise {
  
  /**
   * 模板/模板方法
   */
  public final void exercise(){
    // 运动前的拉伸活动
    beforeExercise();
    // 进入锻炼
    enterExercise();
    // 运动后的拉伸
    afterExercise();    
  }

  /**
   * 热身
   */
  abstract void beforeExercise();
  
  /**
   * 进入锻炼
   */
  abstract void enterExercise();
  
  /**
   * 拉伸
   */
  abstract void afterExercise();
  
}

2.抽象类的继承者;

/**
 * 2.1 跑步类
 * @author 程就人生
 * @Date
 */
public class Run extends AbstractExercise{

  @Override
  void beforeExercise() {
    System.out.println("跑步前的热身运动...");
  }

  @Override
  void enterExercise() {
    System.out.println("跑步中...");
  }

  @Override
  void afterExercise() {
    System.out.println("跑步后的拉伸运动...");
  }
}

/**
 * 2.2 游泳类
 * @author 程就人生
 * @Date
 */
public class Swim extends AbstractExercise{

  @Override
  void beforeExercise() {
    System.out.println("游泳前的热身运动...");
  }

  @Override
  void enterExercise() {
    System.out.println("游泳中...");
  }

  @Override
  void afterExercise() {
    System.out.println("游泳后的拉伸运动...");
  }

}

3.测试代码;

public static void main(String[] argo){
    // 跑步
    AbstractExercise run = new Run();
    run.exercise();
    System.out.println();
    // 游泳
    AbstractExercise swim = new Swim();
    swim.exercise();
  }

运行结果:

跑步前的热身运动...
跑步中...
跑步后的拉伸运动...

游泳前的热身运动...
游泳中...
游泳后的拉伸运动...

代码说明:去过健身房的伙伴们都知道,无论哪种健身,健身流程都是一样的,运行前先热身,然后进入正式的运动,运动过后再拉伸。抽象运动类AbstractExercise定义了健身的流程,至于运动前的具体活动、进入正式锻炼、运动后的活动则放在了子类实现。上面便是模板模式的简单实现。

最后总结

模板模式,它是一个和算法有关系的设计模式。它使用抽象类锁定算法流程,其子类负责具体实现,和其他设计模式还是有很大区别的。

思考题:你现在还能想起几个和算法有关的设计模式?在项目中有没有模板模式使用的业务场景呢?你又是如何处理的呢?还有优化空间吗?

相关文章

  • 模板模式,也是解耦算法的吗?

    模板模式,和算法有什么关系呢? 模板模式,在什么场景使用呢? 模板模式(Template Pattern),定义一...

  • 策略模式,是如何解耦算法的?

    策略模式,是对谁和谁的解耦? 策略模式,怎么用? 策略模式(Strategy Pattern),定义了一系列算法并...

  • 设计模式

    设计模式要干的事情就是解耦。创建型模式是将创建和使用代码解耦,结构型模式是将不同功能代码解耦,行为型模式是将不同的...

  • 命令模式(Command)

    请求发送者与接收者解耦——命令模式(一)请求发送者与接收者解耦——命令模式(二)请求发送者与接收者解耦——命令模式...

  • 结构型 代理模式(文末有项目连接)

    1:什么是代理模式 2:没用代理模式时的实例 3:使用代理模式将其解耦(静态代理) 3:使用代理模式将其解耦(动态...

  • 4. Disruptor高级应用

    核心链路 核心链路特点:至关重要且业务复杂。 实现方式: 传统的完全解耦模式 模板模式 解决手段:1 领域模型的高...

  • 观察者模式结合Android源码

    1.观察者模式最重要的作用? 解耦,将观察者和被观察者解耦。eg:ui层与具体的业务逻辑解耦 2.观察者模式的定义...

  • 消息队列

    为什么要使用消息队列? 主要用于三个场景 解耦 异步 削峰 解耦 传统模式: 异步 传统模式: 削峰 传统模式: ...

  • 桥梁模式

    桥梁模式的定义 桥梁模式也叫做桥接模式定义:将抽象和实现解耦,使得两者可以独立地变化。桥梁模式的重点是在“解耦”上...

  • 桥接模式

    一、桥接模式 解耦图解 示例代码

网友评论

      本文标题:模板模式,也是解耦算法的吗?

      本文链接:https://www.haomeiwen.com/subject/kgkburtx.html