首页 > 其他分享 >2、策略模式

2、策略模式

时间:2024-03-12 18:59:27浏览次数:35  
标签:策略 AlgorithmInterface 模式 Strategy 纯虚 抽象类 函数

C++抽象类(接口)

一、接口:描述类的行为和功能,而无需完成类的特定实现

C++接口通过抽象类实现的,设计抽象类的目的,是为了给其他类提供一个可以继承的适当的基类;如果派生类没有重写所有纯虚函数,则派生类也是抽象类(抽象派生类);派生类只有实现所继承的抽象基类中的所有纯虚函数,才能进行实例化。

二、抽象类与纯虚函数(抽象方法)

纯虚函数是一个在 基类中声明的虚函数,它在该基类中没有定义具体的函数体(操作内容),要求派生类根据实际需要定义自己的版本,设计多层次类继承关系时用到。把某个方法声明为一个抽象方法等于告诉编译器,这个方法必不可少,但目前在基类中还不能为它提供实现。

纯虚函数的标准格式:

//在虚函数尾部加上" =0 " 一个虚函数便被声明成为了一个纯虚函数
virtual 返回类型 函数名(参数表)=0;
  • 注意:抽象类不能声明对象,但可以声明对应的指针和引用。

策略模式

单纯的策略模式与简单工厂模式作对比,确实并不能看出策略模式有什么优势,因为始终还是绕不开如何去new一个我们需要的对象。但看到把简单工厂和Context结合后…觉得这玩意er还是有点用的,但就是前期铺垫的过于啰里吧嗦。

就这本书上举的例子而言,简言之我认为“策略模式”就是把“工厂”多封装一层A,new出来的对象用A里头的成员变量a来接收,再给A加个成员函数供用户去调用,而这个成员函数的功能就是调用成员变量对应的那个类的虚函数咯。

class Strategy
{
public:
    virtual void AlgorithmInterface() = 0;//纯虚函数
};//拥有纯虚函数,属于抽象类

//具体策略A
class  ConcreteStrategyA : Strategy
{
    void AlgorithmInterface()//虚函数
    {
        printf("策略A");
    }
};

//具体策略B
class  ConcreteStrategyB : Strategy
{
    void AlgorithmInterface()//虚函数
    {
        printf("策略B");
    }
};

//具体策略C
class  ConcreteStrategyC : Strategy
{
    void AlgorithmInterface()//虚函数
    {
        printf("策略C");
    }
};

//上下文
class Context
{
    Strategy *strategy;

    Context(Strategy *strategy)//初始化时需传入具体的策略对象
    {
        this->strategy = strategy;
    }

    void ContextInterface()
    {
        this->strategy->AlgorithmInterface();
    }
};

上文提到简单的策略模式、以及策略+工厂,都绕不开如何new一个对象,被迫都使用switch进行条件判断,来new对象,这样导致每加一个方法,我们都需要修改switch的内容。所以更好的方法是用到反射。

标签:策略,AlgorithmInterface,模式,Strategy,纯虚,抽象类,函数
From: https://blog.csdn.net/qq_45880695/article/details/136627564

相关文章

  • MaxEnt模型在R语言中的参数调优:物种分布模拟的优化策略
    在生态学研究中,物种分布模拟是一项至关重要的任务。它有助于我们理解物种与环境之间的复杂关系,预测物种在气候变化或人类活动影响下的潜在分布变化。近年来,随着计算机技术的不断发展,基于机器学习的物种分布模拟方法逐渐成为研究热点。其中,MaxEnt模型作为一种广泛应用的物种......
  • 单例模式的几种实现方式
    单例模式的实现有多种方式,如下所示:1、懒汉式,线程不安全是否Lazy初始化:是是否多线程安全:否实现难度:易描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁synchronized,所以严格意义上它并不算单例模式。这种方式lazyloading很明显,不要......
  • 工业智能网关的网关模式和交换机模式有哪些区别
    工业智能网关主要用以实现工业物联网络中不同设备和系统之间的通信,工业智能网关常见的两种工作模式是网关模式和交换机模式,在功能和应用场景上存在显著差异,本篇就为大家简单介绍一下两者之间的主要区别: 1、网关模式工业智能网关的网关模式可以实现不同网络和设备之间的数据交......
  • 【设计模式】Reactor 模式简介
    如果你熟悉Java的23种设计模式,看到“Reactor模式”可能就会一脸懵逼,这是什么鬼。Reactor是一种应用在服务器端的开发模式(也有说法称Reactor是一种IO模式),目的是提高服务端程序的并发能力。Reactor模式它要解决什么问题呢?传统的threadperconnection用法中,线程在真......
  • flink部署模式和运行模式
    flink部署模式部署模式:flink里面的计算程序运行的方式sessionsession模式一个flink集群可以跑多个计算任务,资源共享session模式下集群是提前启动的,然后向flink集群提交jobper-job(高版本已经不推荐了)per-job模式下,一个集群只跑一个计算任务,资源独立,集群的启动是跟随......
  • 保护模式:段机制
     一、段机制  内存是计算机系统的关键资源,程序必须被加载到内存中才可以被CPU所执行。程序运行过程中,也要使用内存来记录数据和动态的信息。在一个多任务的系统中,每个任务都需要使用内存资源,因此系统需要有一套机制来隔离不同任务所使用的内存,要使这种隔离即安全又高效,那么硬......
  • Spring中使用自带@Autowired注解实现策略模式
    场景SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130503707设计模式-策略模式在Java中的使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/d......
  • 一文搞懂Vue的MVVM模式与双向绑定
    v-model是Vue.js框架中用于实现双向数据绑定的指令。它充分体现了MVVM(Model-View-ViewModel)模式中的双向数据绑定特性。下面我们将详细解释v-model如何体现MVVM和双向绑定:1.MVVM模式MVVM模式是一种软件架构设计模式,它将应用程序分为三个部分:Model(模型):代表应用程序的......
  • 设计模式
    工厂模式工厂模式提供了一种获取对象的方法。作用:封装创建对象的细节。实现类鱼类的解耦操作装饰模式在不改变一个类的基础上,动态扩展一个类的功能。单例模式饿汉单例/***@authorPickle*@versionV1.0*@date2024/3/1214:51*/publicclassSingleInsta......
  • 一键开启 GPU 闲置模式,基于函数计算低成本部署Google Gemma 模型服务
    背景信息Google在2024年02月21日正式推出了自家的首个开源模型族Gemma,并同时上架了四个大型语言模型,提供了2B和7B两种参数规模的版本,每种都包含了预训练版本(base模型)和指令微调版本(chat模型)。根据Google的技术报告,本次开源的Gemma在问题回答、合理性、数学、代码......