当前位置: 首页 > article >正文

深度学习模板方法设计模式

文章目录

  • 前言
  • 一、介绍
  • 二、特点
  • 三、详细介绍
    • 1.核心组成
    • 2.代码示例
    • 3.优缺点
      • 优点
      • 缺点
    • 4.使用场景
  • 总结


前言

模板方法设计模式是行为型设计模式,主要是定义算法框架,并将一些步骤的实现延迟到子类,重新定义算法的步骤。


一、介绍

模板设计模式(Template Pattern)是一种行为型设计模式,它在超类中定义了一个算法的框架,将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法的某些特定步骤。

二、特点

模板方法设计模式主要有以下特点:

  • 算法框架:在超类中定义一个或多个模板方法,这些方法定义了算法的骨架,但具体的实现步骤可以延迟到子类中。
  • 钩子方法:在超类中定义的方法,可以被子类覆盖,以提供特定的行为。
  • 抽象方法:在超类中定义的方法,子类必须实现这些方法。
  • 具体方法:在超类中定义的方法,子类可以继承并使用这些方法,也可以覆盖它们。
  • 扩展性:模板设计模式提高了代码的扩展性,允许在子类中扩展或修改算法的特定步骤。
  • 灵活性:通过模板方法,可以在运行时动态地改变算法的行为。

三、详细介绍

1.核心组成

  • AbstractClass(抽象类):定义了模板方法和钩子方法,以及可能的抽象方法和具体方法。
  • ConcreteClass(具体类):继承自抽象类,实现抽象方法,并可能覆盖钩子方法和具体方法。

在这里插入图片描述

2.代码示例

抽象模板类

/**
 * 抽象模板
 * 电脑组装
 */
public abstract class ComputerAssemble {

    /**
     * 组装
     */
    public final void assemble(){
        step1();
        step2();
        step3();
        step4();
        step5();
        step6();
    }

    /**
     * 准备工作
     */
    public void step1(){
        System.out.println("准备工具与零件");
    }

    /**
     * 安装显示屏
     */
    public abstract void step2();


    /**
     * 内存
     */
    public abstract void step3();

    /**
     * 硬盘
     */
    public abstract void step4();

    /**
     * 组装主机
     */
    public void step5(){
        System.out.println("组装主机");
    }

    public void step6(){
        System.out.println("组装电脑");
    }
}

具体实现类

/**
 * 具体模板
 * 高配
 */
public class HighComputer extends ComputerAssemble{
    @Override
    public void step2() {
        System.out.println("安装24寸4K显示屏");
    }

    @Override
    public void step3() {
        System.out.println("安装32G内存条");
    }

    @Override
    public void step4() {
        System.out.println("安装1T固态硬盘");
    }
}
/**
 * 具体模板
 * 低配电脑
 */
public class LowComputer extends ComputerAssemble{
    @Override
    public void step2() {
        System.out.println("安装16寸2K显示屏");
    }

    @Override
    public void step3() {
        System.out.println("安装8G内存条");
    }

    @Override
    public void step4() {
        System.out.println("安装1T机械硬盘");
    }
}

测试类

/**
 * 测试类
 */
public class TemplateTest {

    public static void main(String[] args) {
        ComputerAssemble low = new LowComputer();
        low.assemble();
        System.out.println("=================");
        ComputerAssemble high=new HighComputer();
        high.assemble();

    }
}

结果
在这里插入图片描述

3.优缺点

优点

  • 扩展性好,对不变的代码进行封装,对可变的进行扩展,符合开闭原则。

缺点

  • 每一个不同的实现都需要一个子类来实现,导致类的个数增加,会使系统变得复杂。

4.使用场景

  • 当需要将算法分解为一系列步骤,并且希望在不改变算法结构的前提下,允许子类改变某些步骤时。
  • 当希望将某些操作的执行延迟到子类时。
  • 当需要通过子类扩展或修改算法的特定步骤,以适应不同场景时。

总结

模板设计模式在实际开发中非常有用,特别是在需要执行一系列固定步骤,但某些步骤的具体实现需要由子类定制的场景中。它提高了代码的复用性和灵活性,同时保持了算法结构的一致性。


http://www.kler.cn/a/287634.html

相关文章:

  • MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并--封装到存储过程中
  • Linux最深刻理解页表于物理内存
  • <项目代码>YOLOv8 番茄识别<目标检测>
  • 无人机场景 - 目标检测数据集 - 车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • RTSP播放器EasyPlayer.js播放器UniApp或者内嵌其他App里面webview需要截图下载
  • UNI-APP小程序答题功能开发(左右滑动,判断,填空,问答,答题卡,纠错,做题倒计时等)
  • OZON收纳产品,OZON热卖收纳产品
  • 视频结构化从入门到精通——视频结构化主要技术介绍
  • k8s安装test
  • 线上剧本杀小程序,线上游戏新体验
  • 【国外比较权威的免费的卫星数据网站——DigitalGlobe Open Data Program】
  • RocketMQ 实战:在 macOS 上安装与前端访问全流程指南
  • nginx 部署前端vue项目
  • 【Java】IDEA从零到一使用statemachine状态机模拟订单 (图解)
  • 9月2日记
  • 【Transformer】基本概述
  • iPhone出现4013错误的和解决方案分享
  • AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.08.10-2024.08.15
  • 使用twilio向手机发短信做监控报警
  • 算法之哈希表
  • 地级市地理相邻矩阵(地级市名称版、行政区划代码版)
  • Microsoft DirectML 现在支持 Copilot+ PC 和 WebNN
  • 在繁忙工作环境中提升开发效率:JetBrains IntelliJ IDEA 的应用
  • Python中的函数艺术:解锁高效编程的秘密
  • 零差云控电机ubuntu+IGH调试记录
  • 【Linux】POSIX版本 信号量