当前位置: 首页 > 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;说明理由 目录 计算机体系结构 计算机组成 二者区别 哪个对性能更重要 计算机体系结构 计算机体系结构是指根据属性和功能不同而划分的计算机理论组成部分及计算机基本工作原理、理论…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...