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

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


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

模式说明

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

优点:

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

缺点:

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

示例代码

cpp 复制代码
#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;
}
相关推荐
wuyikeer1 分钟前
Spring Boot 经典九设计模式全览
java·spring boot·设计模式
努力努力再努力wz10 分钟前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python
努力努力再努力wz13 分钟前
【Linux网络系列】万字硬核解析网络层核心:IP协议到IP 分片重组、NAT技术及 RIP/OSPF 动态路由全景
java·linux·运维·服务器·数据结构·c++·python
minji...26 分钟前
Linux 线程同步与互斥(四) POSIX信号量,基于环形队列的生产者消费者模型
linux·运维·服务器·c语言·开发语言·c++
王老师青少年编程1 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【排序贪心】:拼数
c++·算法·贪心·csp·信奥赛·排序贪心·拼数
程序猿编码1 小时前
给Linux程序穿“隐身衣”——ELF运行时加密器全解析(C/C++代码实现)
linux·c语言·c++·网络安全·elf·内存安全
John_ToDebug1 小时前
从 Win10 到 Win11 22H2+:任务栏美化中的“蒙版”和“Hover 色块”渲染原理解析
c++·chrome·windows
谭欣辰2 小时前
AC自动机:多模式匹配的高效利器
数据结构·c++·算法
三月微暖寻春笋2 小时前
【和春笋一起学C++】(六十三)虚函数特性(二)
c++·基类·派生类·虚函数特性
历程里程碑2 小时前
MySQL事务深度解析:ACID到MVCC实战+万字长文解析
开发语言·数据结构·数据库·c++·sql·mysql·排序算法