【设计模式】13、template 模板模式

server/2024/11/30 5:52:24/

文章目录

  • 十三、template 模板模式
    • 13.1 ppl
      • 13.1.1 目录层级
      • 13.1.2 ppl_test.go
      • 13.1.3 ppl.go
      • 13.1.4 llm_ppl.go
      • 13.1.5 ocr_ppl.go

十三、template 模板模式

https://refactoringguru.cn/design-patterns/template-method

如果是一套标准流程, 但有多种实现, 可以用 template 模板模式.

例如, 如果要开发一个数据挖掘程序, 支持输入 word, csv, pdf. 他们其实是相同的流程(如打开文件, 读取数据, 转换数据, 输出数据).

因为每种类别的流程相同, 所以每种类别的实现有很多重复代码.

为了消除这些重复代码, 可以定义基类, 实现通用的逻辑, 如果有个性化的逻辑再覆盖.

13.1 ppl

https://refactoringguru.cn/design-patterns/template-method/go/example

go 虽然没有继承, 但可通过 interface 和 组合实现. 框架如下:

type iTemplate interface {  step1()    step2()}  // 外部使用的基类  
type wrapper struct {  template iTemplate}  // 基类的方法: 串联整个流程  
func (w *wrapper) run() {  w.template.step1()    w.template.step2()}  

然后有如下具体实现:

type impl1 struct {}  
func (i *impl1) step1() {}  
func (i *impl1) step2() {}  type impl2 struct {}  
func (i *impl2) step1() {}  
func (i *impl2) step2() {}  

使用:

// 第一种实现  
w := &wrapper{template: &impl1{}}  
w.run()  // 第二种实现  
w := &wrapper{template: &impl2{}}  
w.run()  

13.1.1 目录层级

├── llm_ppl.go
├── ocr_ppl.go
├── ppl.go
├── ppl_test.go
└── readme.md

13.1.2 ppl_test.go

package _31pplimport "testing"func TestLLMPipeline(t *testing.T) {e := &aiEngine{ppl: &llmPipeline{}}e.runPipeline()e = &aiEngine{ppl: &ocrPipeline{}}e.runPipeline()
}

13.1.3 ppl.go

package _31ppl// imagePipeline 图像处理流程
type imagePipeline interface {// 检测detect()// 分类classification()
}type aiEngine struct {ppl imagePipeline
}func (e *aiEngine) runPipeline() {e.ppl.detect()e.ppl.classification()
}

13.1.4 llm_ppl.go

package _31pplimport "fmt"type llmPipeline struct{}func (ppl *llmPipeline) detect() {fmt.Println("llmPipeline detect")
}func (ppl *llmPipeline) classification() {fmt.Println("llmPipeline classification")
}

13.1.5 ocr_ppl.go

package _31pplimport "fmt"type ocrPipeline struct{}func (ppl *ocrPipeline) detect() {fmt.Println("ocrPipeline detect")
}func (ppl *ocrPipeline) classification() {fmt.Println("ocrPipeline classification")
}

http://www.ppmy.cn/server/25736.html

相关文章

编译Qt6.5.3LTS版本(Mac/Windows)的mysql驱动(附带编译后的全部文件)

文章目录 0 背景1 编译过程2 福利参考 0 背景 因为项目要用到对MYSQL数据库操作,所以需要连接到MYSQL数据库。但是连接需要MYSQL驱动,但是Qt本身不自带MYSQL驱动,需要自行编译。网上有很多qt之前版本的mysql驱动,但是没有找到qt6…

【C语言】typedef

为一个数据类型起一个新的别名 typedef int INTEGER; INTEGER a,b; a1; b2;typedef char ARRAY20[20]; ARRAY20 a1,a2,s1,s2;typedef struct stu{char name[20];int age;char sex; }STU; STU body1,body2;typedef int (*PTR_TO_ARR)[4]; PTR_TO_ARR p1,p2;typedef int (*PTR_TO…

C++ 多态

C/C总述:Study C/C-CSDN博客 目录 多态概念 多态分类 多态实现 虚函数&虚函数表 虚函数的重写(覆盖) 多态的构成条件 虚函数重写的两个特例 协变 析构 关键字final和override(C11) 抽象类 纯虚函数…

设备能源数据采集新篇章

在当今这个信息化、智能化的时代,设备能源数据的采集已经成为企业高效运营、绿色发展的重要基石。而今天,我们要向大家介绍的就是一款颠覆传统、引领未来的设备能源数据采集神器——HiWoo Box网关! 一、HiWoo Box网关:一站式解决…

吐槽3家知名的AI智能体

关注卢松松,会经常给你分享一些我的经验和观点。 我花了2天时间,把松松最近1年的爆款文案关键词情绪口头禅整理出来,4000多字的Prompt,都是一点点打出来的,再投喂到AI大模型里。使用的平台包括:通义千问、…

变电站自动化控制系统应用案例分析

变电站自动化控制系统介绍 变电站自动化控制系统用于大中型企业变电站项目,这类企业变压器多,日耗电量大。把多个变压器集中到一个电器平台上,集中管理分析,优化厂区用电管理,从而达到集中控制、集中分析、集中管理的…

【QEMU系统分析之实例篇(六)】

系列文章目录 第六章 QEMU系统仿真的机器创建分析实例 文章目录 系列文章目录第六章 QEMU系统仿真的机器创建分析实例 前言一、QEMU是什么?二、QEMU系统仿真的机器创建分析实例1.系统仿真的命令行参数2.目标机器创建过程3.static void pc_machine_initfn(Object *o…

【架构】后端项目如何分层及分层领域模型简化

文章目录 一. 如何分层1. 阿里规范2. 具体案例分析 二. 分层领域模型的转换1. 阿里规范2. 模型种类简化分析 三. 小结 本文描述后端项目中如何进行分层,以及分层领域模型简化 一. 如何分层 1. 阿里规范 阿里的编码规范中约束分层逻辑如下: 开放接口层&#xff1a…