当前位置: 首页 > 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;
}

http://www.lryc.cn/news/324179.html

相关文章:

  • 【C++】如何用一个哈希表同时封装出unordered_set与unordered_map
  • Day45:WEB攻防-PHP应用SQL二次注入堆叠执行DNS带外功能点黑白盒条件
  • web安全之:三种常见的Web安全威胁
  • C#,图论与图算法,用于检查给定图是否为欧拉图(Eulerian Graph)的算法与源程序
  • Dubbo框架的介绍
  • 手机实时监控电脑屏幕(手机可以看到电脑在干什么吗)
  • 合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测
  • 云原生(五)、Docker-Swarm集群
  • arm核的DMPIS是如何计算的
  • Axure RP 9 for Mac中文激活版:原型设计工具
  • Hive 数据迁移与备份
  • FFMpeg 获取音频音量、提高音量
  • 【java数据结构】基于java提供的ArrayList实现的扑克牌游戏-(附源码~)
  • R语言:microeco:一个用于微生物群落生态学数据挖掘的R包,第八:trans_func class
  • 王道c语言-二叉树前序、中序、后序、层次遍历
  • <REAL-TIME TRAFFIC OBJECT DETCTION FOR AUTONOMOUS DRIVING>论文阅读
  • 优化 - 排序算法
  • Python实战:深拷贝与浅拷贝
  • rollup打包起手式
  • 【笔记】语言实例比较 3. 无重复字符的最长子串 C++ Rust Java Python
  • int的大小你知道时4个字节,那么类的大小你知道怎么计算吗?
  • OpenCV学习笔记(十一)——利用Sobel算子计算梯度
  • 扩展一下BenchmarkSQL,新增支持ASE/HANA/DB2/SQLServer,可以随便用了
  • Android 静默安装成功后自启动
  • 计算机二级真题讲解每日一题:《format格式化》
  • RabbitMQ问题
  • flutter->Scaffold左侧/右侧侧边栏和UserAccountsDrawerHeader的使用
  • vulnhub prime1通关
  • JVM快速入门(1)JVM体系结构、运行时数据区、类加载器、线程共享和独享、分区、Java对象实例化
  • CSS3新属性(学习笔记)