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

《过滤器模式(极简c++)》

        本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客


       本章简要说明过滤器模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。

模式说明

方案: 过滤器模式是一种结构型设计模式,用于过滤一组对象,基于特定条件筛选出所需的对象。

优点:

  1. 松耦合性: 过滤器模式将过滤条件与具体操作解耦,使得条件的变化不影响其他部分。
  2. 可组合性: 可以轻松地组合多个过滤器以实现复杂的过滤逻辑。

缺点:

  1. 类数量增加: 可能会引入过多的具体过滤器类,增加代码复杂度。
本质思想:过滤器模式的本质思想是将过滤条件封装到对象中,然后使用这些对象对原始数据进行过滤,以获取符合条件的结果集。
实践建议:在过滤器很多时。定义一个通用的过滤器接口,以便不同类型的过滤器都可以实现该接口。在需要经过多层过滤时,多个过滤器组合在一起形成过滤链,以实现复杂的过滤需求。这样过滤逻辑集中在一个类中,更方便管理和维护。

示例代码

#include <iostream>
#include <vector>// 基类 Bird
class Bird {
public:virtual bool filter() const = 0;virtual ~Bird() {}
};// 具体类:鸟类
class Sparrow : public Bird {
public:bool filter() const override { return true; } // 飞行鸟
};class Penguin : public Bird {
public:bool filter() const override { return false; } // 水中鸟
};// 具体过滤器:飞行鸟过滤器
class FlyingBirdFilter {
public:bool filter(const Bird& bird) const {return bird.filter();}
};// 过滤器使用示例
int main() {std::vector<Bird*> birds = {new Sparrow(), new Penguin()};FlyingBirdFilter flyingFilter;for (Bird* bird : birds) {if (flyingFilter.filter(*bird)) {std::cout << "This bird can fly." << std::endl;}else {std::cout << "This bird can't fly." << std::endl;}}for (Bird* bird : birds) {delete bird;}/*
输出:This bird can fly.This bird can't fly.
*/return 0;
}

相关文章:

《过滤器模式(极简c++)》

本文章属于专栏- 概述 - 《设计模式&#xff08;极简c版&#xff09;》-CSDN博客 本章简要说明过滤器模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。 模式说明 方案&#xff1a; 过滤器模式是一种结构型设计模式&#xff0c;用于过滤一组对象&#xff0c;基…...

【C++】如何用一个哈希表同时封装出unordered_set与unordered_map

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.哈希桶源码 2.哈希…...

Day45:WEB攻防-PHP应用SQL二次注入堆叠执行DNS带外功能点黑白盒条件

目录 PHP-MYSQL-二次注入-DEMO&74CMS DEMO-用户注册登录修改密码 CMS-74CMS个人中心简历功能 PHP-MYSQL-堆叠注入-DEMO&CTF强网 Demo 2019强网杯-随便注&#xff08;CTF题型&#xff09; PHP-MYSQL-带外注入-DEMO&DNSLOG(让服务器主动把数据交出去) 知识点&…...

web安全之:三种常见的Web安全威胁

Web安全是确保Web应用和用户数据安全的一系列措施和实践。了解和防御常见的安全威胁是每个Web开发人员的基本职责。下面&#xff0c;我们将详细讨论三种常见的Web安全威胁&#xff1a;SQL注入、跨站脚本&#xff08;XSS&#xff09;和跨站请求伪造&#xff08;CSRF&#xff09;…...

C#,图论与图算法,用于检查给定图是否为欧拉图(Eulerian Graph)的算法与源程序

1 欧拉图 欧拉图是指通过图(无向图或有向图)中所有边且每边仅通过一次通路, 相应的回路称为欧拉回路。具有欧拉回路的图称为欧拉图(Euler Graph), 具有欧拉通路而无欧拉回路的图称为半欧拉图。 对欧拉图的一个现代扩展是蜘蛛图,它向欧拉图增加了可以连接的存在点。 这给…...

Dubbo框架的介绍

什么是dubbo Dubbo是一个高性能的、轻量级的开源RPC&#xff08;远程过程调用&#xff09;框架&#xff0c;由阿里巴巴公司开发并开源。它提供了基于Java的远程服务调用和管理的解决方案&#xff0c;可以帮助开发者快速构建分布式应用和服务。 Dubbo具有以下特点&#xff1a; …...

手机实时监控电脑屏幕(手机可以看到电脑在干什么吗)

已经2024年了&#xff0c;假如你还在问我&#xff0c;手机可以看到电脑在干什么吗&#xff0c;有没有手机实时监控电脑屏幕的系统。 那么证明&#xff0c;你可能已经out 了。 现代科技告诉发展的态势下&#xff0c;这种技术已经很成熟了。 域智盾软件就可以实现这种效果↓我们…...

合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测

原文链接&#xff1a;合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247598798&idx7&snc054ed7c9d9c433d00837a7798080935&chksmfa820329cdf58a3f6b5986d6d4da3d19f81e3efd0b159f…...

云原生(五)、Docker-Swarm集群

基础环境说明 1、环境准备 1、启动4台服务器&#xff08;在同一个网段内&#xff09;。 2、重命名4台服务器&#xff0c;方便区分。 hostnamectl set-hostname swarm1 reboot安装docker。参考文章&#xff1a;云原生&#xff08;二&#xff09;、Docker基础 2、DockerSwarm…...

arm核的DMPIS是如何计算的

直接看这篇&#xff1a;https://zhuanlan.zhihu.com/p/660155292 写的很好&#xff1a; "SA8155P的CPU算力计算如下&#xff08;按照A75性能提升50%来计算&#xff0c;即 5.2 * 1.5 7.8 DMIPS/MHz &#xff09; SA8155P算力 2.419GHz * 1核 * 7.8 DMIPS/MHz 2.131GH…...

Axure RP 9 for Mac中文激活版:原型设计工具

Axure RP 9 for Mac是一款值得设计师信赖的原型设计工具。它以其卓越的性能和稳定的运行赢得了广大用户的赞誉。 软件下载&#xff1a;Axure RP 9 for Mac中文激活版下载 在Axure RP 9中&#xff0c;您可以尽情发挥自己的设计才华&#xff0c;创造出独一无二的原型作品。无论是…...

Hive 数据迁移与备份

迁移类型 同时迁移表及其数据&#xff08;使用import和export&#xff09; 迁移步骤 将表和数据从 Hive 导出到 HDFS将表和数据从 HDFS 导出到本地服务器将表和数据从本地服务器复制到目标服务器将表和数据从目标服务器上传到目标 HDFS将表和数据从目标 HDFS 上传到目标 Hiv…...

FFMpeg 获取音频音量、提高音量

查看音量 准备原生音频original.mp3 查看original.mp3的音量信息&#xff1a; ffmpeg -i original.mp3 -filter_complex volumedetect -c:v copy -f null /dev/null输出&#xff1a; Input #0, mp3, from original.mp3:Metadata:artist : Administratorencoder …...

【java数据结构】基于java提供的ArrayList实现的扑克牌游戏-(附源码~)

【Java数据结构】基于java泛型实现的二维数组完成三人扑克游戏 基本框架的实现创建一副牌如何进行洗牌&#xff1a;每个人抓的牌放到哪里&#xff1a; 源码具体实现cardcardsTest 个人简介&#xff1a;努力学编程 每日鸡汤&#xff1a;stay foolish,stay hungry-史蒂芬.乔布斯斯…...

R语言:microeco:一个用于微生物群落生态学数据挖掘的R包,第八:trans_func class

# 生态学研究人员通常对微生物群落的功能特征感兴趣&#xff0c;因为功能或代谢数据对于解释微生物群落的结构和动态以及推断其潜在机制是强有力的。 # 由于宏基因组测序复杂且昂贵&#xff0c;利用扩增子测序数据预测功能谱是一个很好的选择。 # 有几个软件经常用于此目标&…...

王道c语言-二叉树前序、中序、后序、层次遍历

main.cpp #include "function.h"//abdhiejcfg 前序遍历深度优先遍历 abdhiejcfg void PreOrder(BiTree p) {if (p ! NULL) {printf("%c ", p->c);//等价于putchar(p->c);等价于visit函数伪代码PreOrder(p->lchild);PreOrder(p->rchild);} }//…...

<REAL-TIME TRAFFIC OBJECT DETCTION FOR AUTONOMOUS DRIVING>论文阅读

Abstract 随着计算机视觉的最新进展&#xff0c;自动驾驶迟早成为现代社会的一部分&#xff0c;然而&#xff0c;仍有大量的问题需要解决。尽管现代计算机视觉技术展现了优越的性能&#xff0c;他们倾向于将精度优先于效率&#xff0c;这是实时应用的一个重要方面。大型目标检测…...

优化 - 排序算法

一、概念 冒泡排序从左往右比较相邻的两个元素&#xff0c;右比左小就换位&#xff0c;这样最大值就出现在了右边最后一个元素上&#xff0c;再从左边第一个元素开始往右比较到倒数第二个元素&#xff0c;如此重复...选择排序 通过线性查找&#xff08;从左往右挨个查找&#…...

Python实战:深拷贝与浅拷贝

1. 引言 在Python中&#xff0c;对象是通过对内存中的数据进行引用来实现的。当我们创建一个对象并将其赋值给另一个变量时&#xff0c;实际上是将这个对象的引用复制给了另一个变量。这意味着&#xff0c;如果原始对象发生改变&#xff0c;引用该对象的变量也会受到影响。为了…...

rollup打包起手式

使用Rollup打包JavaScript rollup是一款小巧的javascript模块打包工具&#xff0c;更适合于库应用的构建工具;可以将小块代码编译成大块复杂的代码&#xff0c;基于ES6 modules,它可以让你的 bundle 最小化&#xff0c;有效减少文件请求大小,vue在开发的时候用的是webpack,但是…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...