当前位置: 首页 > 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,但是…...

Windows 下 Nexus 私有仓库配置与 SpringBoot 项目集成指南

1. Nexus私有仓库基础认知 第一次接触Nexus是在2015年参与某金融项目时&#xff0c;当时团队频繁遇到Maven中央仓库访问超时的问题。技术负责人建议搭建私有仓库&#xff0c;从此Nexus就成了我开发工具箱里的常备利器。简单来说&#xff0c;Nexus就像是你家里的零食储物柜——…...

AI设计新利器!我外卖都没到,你方案图就出来了!

凌晨两点&#xff0c;设计部灯火通明。 小王盯着屏幕上改了第18版的方案&#xff0c;揉了揉酸涩的眼睛。甲方上午刚推翻上周确定的概念&#xff0c;明天就要看新方案。市场部的同事在旁边催&#xff1a;“客户说再不出图就要换供应商了。”而结构组的同事还在等着方案定稿才能…...

终极指南:如何用IPXWrapper在Windows 11上复活经典游戏局域网联机

终极指南&#xff1a;如何用IPXWrapper在Windows 11上复活经典游戏局域网联机 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 还记得那些经典的《星际争霸》、《魔兽争霸2》、《暗黑破坏神》局域网对战时光吗&#xff1f;这些承…...

电压电流双闭环Vienna整流器SVPWM调制仿真研究

基于电压电流双闭环的vienna整流器的仿真(SVPWM调制)最近在实验室折腾Vienna整流器&#xff0c;双闭环调得我差点把示波器砸了。这玩意儿看着电路拓扑对称美如画&#xff0c;真调起来参数互相打架是常态。今天就结合仿真说说怎么让电压电流双闭环稳住&#xff0c;顺便把SVPWM那…...

新手入门:5分钟搞懂雷达中的Dwell Time和Hits per Scan(附计算公式)

雷达系统核心参数解析&#xff1a;从Dwell Time到Hits per Scan的实战指南 雷达技术作为现代探测系统的基石&#xff0c;其性能优劣往往取决于几个关键参数的精确配置。对于刚接触雷达领域的技术人员来说&#xff0c;理解这些参数的实际意义和相互关系&#xff0c;就像掌握了一…...

通义实验室正式开源 Mobile-Agent v3.5 及新一代多平台 GUI Agent 基座模型 GUI-Owl-1.5

做过自动化的人都知道&#xff0c;最让人抓狂的不是功能实现不了&#xff0c;而是流程跑到一半突然卡住——界面变了、元素找不到、验证码弹出来……GUI Agent 在实验室里跑得再顺&#xff0c;一到真实环境就各种翻车。通义实验室这次发布的 Mobile-Agent v3.5&#xff0c;瞄准…...

3步构建安全可靠的用户脚本生态系统:Greasy Fork深度技术解析

3步构建安全可靠的用户脚本生态系统&#xff1a;Greasy Fork深度技术解析 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork Greasy Fork作为开源的用户脚本平台&#xff0c;基于Ruby on Rai…...

5 种常见数据导入报错及高效排查指南

1. 编码异常&#xff1a;乱码与字符集不匹配 数据导入过程中最让人头疼的莫过于打开文件发现满屏乱码。我遇到过最夸张的情况是某次导入CSV文件&#xff0c;所有中文字符都变成了"锟斤拷"——这其实是UTF-8与GBK编码冲突的典型表现。 常见错误特征&#xff1a; 文件打…...

SSHJ高级功能揭秘:KeepAlive、X11转发与多路复用

SSHJ高级功能揭秘&#xff1a;KeepAlive、X11转发与多路复用 【免费下载链接】sshj ssh, scp and sftp for java 项目地址: https://gitcode.com/gh_mirrors/ss/sshj SSHJ是一个强大的Java SSH库&#xff0c;提供了丰富的SSH功能支持&#xff0c;包括SSH连接、SCP文件传…...

Gazebo 11 插件开发避坑实录:从 ModelPlugin 报错到 WorldPlugin 的平滑迁移

Gazebo 11插件开发深度指南&#xff1a;从兼容性陷阱到高效迁移策略 当Gazebo从9版本迭代到11版本时&#xff0c;许多开发者突然发现原本运行良好的插件代码开始报出各种奇怪的错误。这就像你熟悉的咖啡店突然换了所有设备——虽然咖啡豆还是那些咖啡豆&#xff0c;但制作流程…...