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

策略模式的一次应用

项目的需求是将一组图像按照相似度分类。
采用了模板匹配计算相似度的实现方式。

#include <opencv2/core.hpp>
#include <openev2/core/utility.hpp>
#include <opencv2/highqui.hpp>
#include <openav2/imgproc.hpp>

cv::Mat image matched;
double value;
cv::matchTemplate (image_a, image_b, image_matched, cv::TM CCORR NORMED); cv::minMaxLoc(image_matched, 0, &value, 0, 0);

value的值表示相似度的大小。

这一方案完成后,紧接着又一个需求:使用距离算法作为相似度算法。
而且后面还会有新的算法。
此时,就考虑使用策略模式了。
如果后面没有新需求,仍不需要考虑使用,以避免重构代码带来的时间成本。

使用这一模式后,每一种相似度算法不再是孤立的,而是成了有一个共同父类的兄弟类。
相似度的计算函数calculate()作为父类的纯虚函数,
每个子类用不同的算法实现这一函数。
caller使用父类指针调用函数calculate()。
通过多态机制调用具体子类的函数calculate()。

为什么会选择这一设计模式呢?
使用这一方法后,代码便符合了依赖倒置原则,
依赖于抽象,而不是依赖于具体的实现。
代码将非常有利于扩展,新增一个算法,只需继承父类,并实现纯虚函数。
在caller中使用一个简单工厂在堆中创建子类对象,
每新增一个算法,就在简单工厂中创建出一个新的子类对象。
caller便可以使用新算法了。
节省了开发时间,也节省了测试时间,不用担心先前测试过的算法被新的算法影响。

uml图如下:
在这里插入图片描述

相关文章:

策略模式的一次应用

项目的需求是将一组图像按照相似度分类。 采用了模板匹配计算相似度的实现方式。 #include <opencv2/core.hpp> #include <openev2/core/utility.hpp> #include <opencv2/highqui.hpp> #include <openav2/imgproc.hpp> cv::Mat image matched; double …...

探索PyCharm的C/C++支持:一站式配置指南

探索PyCharm的C/C支持&#xff1a;一站式配置指南 引言 PyCharm&#xff0c;作为JetBrains家族中的一个强大IDE&#xff0c;以其对Python的卓越支持而闻名。然而&#xff0c;PyCharm的多语言支持同样不容小觑。本文将带领你了解如何在PyCharm中配置C/C环境&#xff0c;让你在…...

手机三要素接口怎么对接呢?(一)

一、什么是手机三要素&#xff1f; 手机三要素又叫运营商三要素&#xff0c;运营商实名认证&#xff0c;运营商实名核验&#xff0c;手机三要素实名验证&#xff0c;手机三要素实名核验&#xff0c;每个人的称呼都不同&#xff0c;但是入参和出参是一样的。 输入姓名、身份证…...

状态同步帧同步

帧同步&#xff1a; 有明确的逻辑帧概念&#xff0c;按照固定的逻辑帧间隔同步帧数据 原理 锁帧&#xff1a;mmo那种游戏&#xff0c;服务器需要收到第k帧所有客户端的指令&#xff0c;就算没有操作也发个空指令上去&#xff08;相对来说回合制卡牌这类就简单很多&#xff0…...

Flink 开发语言选择 —— Java vs Scala

引言 Apache Flink 是一个用于处理无界和有界数据流的开源分布式计算框架。随着 Flink 的日益流行&#xff0c;越来越多的开发者开始考虑使用哪种编程语言来进行 Flink 应用程序的开发。本文将探讨在 Flink 中使用 Java 和 Scala 的优缺点&#xff0c;并帮助你做出更明智的选择…...

如何在 Apache Web 服务器中安装、配置和使用模块

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 ## 状态&#xff1a;已弃用本文涵盖的是不再受支持的 Ubuntu 版本。如果您目前正在运行 Ubuntu 12.04 服务器&#xff0c;我们强烈建议升…...

海信聚好看的DBDocter软件使用心得

在墨天轮大会看到这个软件,好称是内核级别的诊断工具, 工作空闲下载免费看看 结果要1.7GB还TAR. DBdoctor是一款内核级数据库性能诊断软件。可以对数据库做细粒度的扫描&#xff0c;帮助您一分钟内找到数据库性能问题&#xff0c;实现性能诊断百倍提效。针对数据库性能诊断门…...

dfs深搜

Problem - C - Codeforces 无向图,判断是否是子叶....

【React】详解 index.js 文件

文章目录 一、index.js文件的基本结构1. 引入必要的模块2. 渲染根组件3. 注册服务工作者&#xff08;可选&#xff09; 二、index.js文件的详细解析1. ReactDOM.render的作用2. 为什么使用React.StrictMode3. 服务工作者的注册 三、index.js文件的最佳实践1. 使用模块化引入2. …...

Android NDK/JNI面试题大全及参考答案(3万字长文)

目录 什么是NDK?它主要用来做什么? 为什么在Android开发中使用NDK? 描述一下NDK和JDK之间的关系 举出一些使用NDK开发的应用场景 什么是JNI?它如何与NDK配合使用? 如何安装和配置Android NDK? 在Android Studio中如何配置NDK路径? 描述一下NDK工具链中的主要工具…...

从根儿上学习spring一 之杂谈

相信学做Java开发的同学从开始工作时就被问及什么是spring的依赖注入&#xff0c;以及切面编程。今天我们简单再聊聊这两个概念。 依赖注入 这里的依赖不是动词依赖依靠的意思&#xff0c;而是名词。可以把这两个词翻过来读下”注入依赖“&#xff0c;所谓的依赖可以理解成一…...

AI智能名片小程序在促销性内容营销中的创新应用与策略分析

摘要&#xff1a;在数字化时代&#xff0c;企业营销手段日益丰富多元&#xff0c;促销性内容作为吸引顾客、促进消费的关键手段之一&#xff0c;其形式与效率不断被革新。随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;AI智能名片小程序作为一种新兴的营销…...

13. 罗马数字转整数【 力扣(LeetCode) 】

一、题目描述 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符数值字符数值I1V5X10L50C100D500M1000 例如&#xff0c; 罗马数字 2 写做 II &#xff0c;即为两个并列的 1 。12 写做 XII &#xff0c;即为 X…...

0CTF/TCTF 2023 OLAPInfra Nashorn RCE + HDFS UDF RCE

前置知识 ClickHouse&#xff1a;是一个开源的列式数据库管理系统 clickhouse-jdbc-bridge&#xff1a;clickhouse数据库和jdbc交互的工具 HDFS&#xff08;Hadoop Distributed File System&#xff09;&#xff1a;专为大数据存储和处理而设计。 审计 <?php error_re…...

Studying-代码随想录训练营day56| 108.冗余连接、109.冗余连接II

第56天&#xff0c;图论06&#xff0c;并查集题目类型冗余连接(ง •_•)ง&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 108.冗余连接 109.冗余连接II 总结 108.冗余连接 文档讲解&#xff1a;手撕冗余连接 题目&#xff1a;108. 冗余连接 (kamacoder.com) 学习&…...

基于springboot+vue+uniapp的智慧物业平台小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…...

MATLAB霍夫曼表盘识别系统

MATLAB霍夫曼表盘识别系统 一、介绍 本设计为基于MATLAB的表盘指针识别&#xff0c;算法原理是基于hough变换。可检测压力表&#xff0c;石英手表&#xff0c;电表刻度&#xff0c;气压表等带指针刻度的表盘。通过hough检测直线和圆的关系&#xff0c;得出指针夹角&#xff0…...

Python | Leetcode Python题解之第322题零钱兑换

题目&#xff1a; 题解&#xff1a; class Solution:def coinChange(self, coins: List[int], amount: int) -> int:dp [float(inf)] * (amount 1)dp[0] 0for coin in coins:for x in range(coin, amount 1):dp[x] min(dp[x], dp[x - coin] 1)return dp[amount] if d…...

python中类class的魔法方法

开始介绍之前&#xff0c;我们先看下之前文章我们介绍过的内置类merryview的一些方法&#xff0c;如下图所示&#xff1a; 有很多双下划线开始和结束的method&#xff0c;这么多method是做啥子用的呢&#xff1f; 其实这些方法就是我们常说的魔法方法&#xff0c;也是python中的…...

计算机体系结构和计算机组成原理的区别

如何理解计算机体系结构和计算机的组成&#xff1f;哪个对计算机的性能更重要&#xff1f;说明理由 目录 计算机体系结构 计算机组成 二者区别 哪个对性能更重要 计算机体系结构 计算机体系结构是指根据属性和功能不同而划分的计算机理论组成部分及计算机基本工作原理、理论…...

k8s中部署prometheus并监控k8s集群以及nginx案例

4台主机 node1主机&#xff1a;k8s集群中的master node2主机&#xff1a;搭建了harbor仓库&#xff0c;存储所需的docker镜像 test3、4主机&#xff1a;k8s集群中的woker 搭建prometheus https://github.com/prometheus-operator/kube-prometheus 获取prometheus压缩包的…...

Phi-4-mini-reasoning实战教程:批量处理CSV数学题库生成标准答案

Phi-4-mini-reasoning实战教程&#xff1a;批量处理CSV数学题库生成标准答案 1. 引言 数学老师们经常面临一个共同挑战&#xff1a;批改大量数学作业和试卷需要花费大量时间。传统方法需要逐题检查&#xff0c;效率低下且容易出错。今天&#xff0c;我们将介绍如何利用Phi-4-…...

别再死记硬背了!用C++/Java手把手实现线索二叉树(附完整代码与避坑指南)

从零实现线索二叉树&#xff1a;C/Java双语言实战与陷阱全解析 第一次在面试白板上遇到线索二叉树的实现题时&#xff0c;我的手心全是汗。教科书上的递归图示看起来清晰&#xff0c;但真正要写出无bug的线索化代码时&#xff0c;那些ltag和rtag就像捉迷藏的孩子&#xff0c;总…...

如何用Mi-Create实现小米穿戴设备表盘个性化设计?

如何用Mi-Create实现小米穿戴设备表盘个性化设计&#xff1f; 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create Mi-Create是一款专为2021年及以后发布的小米穿戴…...

GooglePlay多账号管理神器推荐:5款工具帮你轻松实现合规隔离(2025亲测有效)

GooglePlay多账号管理实战指南&#xff1a;2025年高效合规工具与策略 在移动应用生态中&#xff0c;Google Play作为全球最大的应用分发平台&#xff0c;其严格的账号管理政策让许多开发者感到头疼。特别是对于那些需要运营多个账号的开发者来说&#xff0c;如何在合规前提下实…...

高效安全的网页资源提取方案:猫抓开源工具的技术实现与专业应用

高效安全的网页资源提取方案&#xff1a;猫抓开源工具的技术实现与专业应用 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字化时代&#xff…...

UI设计入门指南——Figma新手必备操作全解析

1. Figma入门&#xff1a;从零到第一个设计稿 第一次打开Figma时&#xff0c;很多人会被满屏的英文界面和复杂工具栏吓到。其实我刚接触时也一样&#xff0c;但现在回头看&#xff0c;掌握基础操作只需要30分钟。Figma作为目前最流行的UI设计工具&#xff0c;最大的优势就是零门…...

Go开发工具终极对决:GoLand与VSCode深度评测与实战指南

1. Go开发工具的选择困境 刚接触Go语言那会儿&#xff0c;我像大多数新手一样纠结&#xff1a;到底该用哪个开发工具&#xff1f;市面上主流的GoLand和VSCode各有拥趸&#xff0c;论坛里的讨论经常演变成"编辑器党"和"IDE党"的论战。经过三年多的实战&…...

为什么数据质量成为人工智能领域最重要的问题

简而言之&#xff1a;传统的基于人工编写规则和被动检查的数据质量体系&#xff0c;从未针对智能体人工智能进行设计。到2026年&#xff0c;当自主代理处理错误数据时&#xff0c;没有人会介入以发现问题。那些在人工智能领域取得成功的组织&#xff0c;并非从更好的模型入手&a…...

intv_ai_mk11实测效果:在24GB显存限制下保持128~512 token长文本生成质量

intv_ai_mk11实测效果&#xff1a;在24GB显存限制下保持128~512 token长文本生成质量 1. 模型效果惊艳展示 intv_ai_mk11作为一款基于Llama架构的中等规模文本生成模型&#xff0c;在24GB显存环境下展现出了令人印象深刻的长文本生成能力。不同于常规模型在显存限制下容易出现…...