多态的用法

ops/2024/10/18 2:37:14/

场景:

目前的一个功能F在一个平台a配置下是Fa()。

void C(Config c){

        PreF();

        if(c is a){

                Fa();

        }

        PostF();

}

现在要添加对另一个平台b的配置。

现在最直接的办法是修改F的调用代码C。

void C(Config a){

PreF();

        if(c is a) {

                Fa();

        }

        else if(c is b) {

                Fb();

        }

   PostF();

}

从尽量扩展,少改动的原则看,最合适的方式就是使用多态。

class Config{

        virtual void F() {};

}

class A:public Config{

        void F(){};

}

void C(Config& c) {

        PreF();

        c.F();

        PostF();

}

这样在添加B配置时直接扩展

class B:public Config{

        void F(){};

}

C就不需要修改了,流程不需要变更,和A配置的差异,放在B配置中,A和B中应该没有共同的流程,共同的流程应该抽象到C()中,防止重复。

当配置是b时

B b;

C(b);

当配置是a时,

A a;

C(a);

c语言中用函数指针实现

struct Config{

void (*)() F;

};

void C(Config c){

        PreF();

        c->F();

        PostF();

}

void Fa(){

}

Config a= {.F = &Fa};

扩展时

void Fb(){

}

Config b= {.F = &Fb};


http://www.ppmy.cn/ops/38001.html

相关文章

Springboot整合飞书向群组/指定个人发送消息/飞书登录

Springboot整合飞书向群组发送消息 飞书开放平台创建企业自建应用 添加应用能力-机器人 创建完成后,进入应用详情页,可以在首页看到 App Id 和 App Secret 在飞书pc端创建一群机器人 此处可以拿到该机器人的webhook地址,通过https的方式,也可以调用发送…

学成在线 - 第3章任务补偿机制实现 + 分块文件清理

7.9 额外实现 7.9.1 任务补偿机制 问题:如果有线程抢占了某个视频的处理任务,如果线程处理过程中挂掉了,该视频的状态将会一直是处理中,其它线程将无法处理,这个问题需要用补偿机制。 单独启动一个任务找到待处理任…

[C++]哈希应用-布隆过滤器快速入门

布隆过滤器 布隆过滤器(Bloom Filter)是一个由布隆在1970年提出的概率型数据结构,它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器的主要特点是高效的插入和查询,可以用于检索一个元素是否在一个集合中。 原理…

射频无源器件之耦合器

一. 耦合器的作用 在射频电路中,射频耦合器将一路微波功率按比例分成几路,用于检测或监测信号,如功率测量和波检测,还可改变信号的幅度、相位等特性,以满足不同的通信需求。根据输入与耦合端的功率差,常被分为5dB、6dB、10dB等耦合器。射频耦合器的类型主要包括定向耦合…

uniapp引入vant组件库

在 UniApp 中引入 Vant 组件库的完整步骤通常如下: 安装 Vant: 首先,你需要通过 npm 或 yarn 安装 Vant。打开项目的根目录,然后在命令行中执行以下命令: 使用 npm: npm install vant 或者使用 yarn&…

JUC下的ScheduledThreadPoolExecutor详解

ScheduledThreadPoolExecutor是Java并发编程框架中一个强大且灵活的线程池实现,专为定时与周期性任务而设计。作为ThreadPoolExecutor的子类,它不仅继承了线程池管理的高效与灵活性,还内置了基于优先级队列的延迟任务调度机制,支持…

数据库(MySQL)—— 函数

数据库(MySQL)—— 函数 字符串函数数值函数日期函数流程函数 我们今天来看MySQL中为我们提供了哪些函数: MySQL中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数。 字符串函数 函数功能CONCAT(S1, S2, ……

6.Nginx

Nginx反向代理 将前端发送的动态请求有Nginx转发到后端服务器 那为何要多一步转发而不直接发送到后端呢? 反向代理的好处: 提高访问速度(可以在nginx做缓存,如果请求的是同样的接口地址,这样就不用多次请求后端&#…