c++和java实现策略模式的差异

这篇具有很好参考价值的文章主要介绍了c++和java实现策略模式的差异。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、C++和java的差异

实例化方式

c++的对象有两种实例化方式,一种是局部变量中直接实例化。一种是new出来的。

MyClass myclass;  //第一种方式
MyClass* myclassPtr=new MyClass();   //第二种方式

java的对象构建,没有第一种方式,java的对象都是new 出来的。

对象保存方式

在策略模式中,策略的使用者需要保存一个策略,策略是不可实例化的。
在java中,可以这样

private Strategy strategy;

此时strategy并没有示例化。此时只是保存一个stategy的指针。
但在C++中,上面的语法是错误的。

Strategy strategy;  //错误!

因为上面的语法在C++中是实例化Strategy对象。而Strategy是抽象类,是不可实例化的。
所以C++至少要像下面这样子才能实现java的效果,也就是保存一个指针

Strategy* strategy;  //正确!

内存

C++以指针的方式保存了Strategy,但strategy对象是由用户注入的。它不在使用Strategy的类的内部,可能与使用Strategy的类生命周期不同。这就有可能导致使用已经死亡的Strategy,或者造成内存泄漏。
java就没有这个问题,首先,因为java的对象都是new 出来的,而且不是由用户delete,所以不会存在使用已经死亡的Strategy。第二,java本身提供垃圾回收机制,所以用户没有在任何地方显式地回收Strategy的内存,也不会造成Stategy对象的内存泄漏。

C++策略模式的实现

C++策略模式需要使用shared_ptr。shared_ptr管理的对象不需要用户手动管理内存,所以不会造成内存泄漏。第二,它相比于unique_ptr,允许多个地方指向同一个实际对象。实现策略模式需要这样的功能。因为使用Strategy的类以及使用Strategy的类外部,都会有一个指针指向一个实际的strategy.

C++策略实现的局限性

它使得用户不得按照局部变量中直接实例化实例化strategy。只能以new 的方式实例化策略对象,并且要求用户有shared_ptr的相关知识,因为传参时必须传shared_ptr<Strategy>的形式。文章来源地址https://www.toymoban.com/news/detail-735463.html

到了这里,关于c++和java实现策略模式的差异的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【策略设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    策略模式(Strategy Pattern)属于行为型设计模式。将每一个算法封装到具有共同接口的独立类中,根据需要来绑定策略,使得具体实现和策略解耦。 当你想使用对象中各种不同的算法变体,使用if...else 所带来的复杂和难以维护,可使用策略模式。或者当有许多相同类,它们仅

    2024年02月01日
    浏览(31)
  • JAVA设计模式第十讲:SPI - 业务差异解决方案

    我们需要在不修改源代码的情况下,动态为程序提供一系列额外的特性 。首先想到的是Spring的AOP技术来构建应用插件,但是在Java自带的插件中,就有完整的实现。SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制 ,可以用来 启用框架扩展和替换组件 ,主要是

    2024年02月09日
    浏览(34)
  • C++设计模式21:策略模式

    C++ 23种设计模式系列文章目录 创建型模式 第1式 工厂方法模式 第2式 抽象工厂模式 第3式 单例模式 第4式 建造者模式 第5式 原型模式 结构型模式 第6式 适配器模式 第7式 桥接模式 第8式 组合模式

    2024年02月02日
    浏览(27)
  • C++ 设计模式之策略模式

    【声明】本题目来源于卡码网(题目页面 (kamacoder.com)) 【提示:如果不想看文字介绍,可以直接跳转到C++编码部分】 【设计模式大纲】 【简介】什么是策略模式 (第14种模式)         策略模式是⼀种 ⾏为型设计模式 ,它定义了⼀系列算法(这些算法完成的是相同的⼯作

    2024年01月17日
    浏览(28)
  • C++策略模式

    1 简介: 策略模式是一种行为型设计模式,用于在运行时根据不同的情况选择不同的算法或行为。它将算法封装成一个个具体的策略类,并使这些策略类可以相互替换,以达到动态改变对象的行为的目的。 2 实现步骤: 以下是使用C++实现策略模式的步骤: a. 定义策略接口:

    2024年02月12日
    浏览(14)
  • 策略模式(C++)

    策略模式是一种行为型设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换,且不影响客户端的使用。策略模式的目的是将算法的使用与实现分离,降低了算法之间的耦合,提高了代码的可扩展性和可维护性。 当有多种算法可以实现同一个功能

    2023年04月08日
    浏览(11)
  • [c++] 查表 —— 策略模式和职责链模式的核心

    查表法在工厂模式、策略模式以及职责链模式中都有使用。以工厂模式为例,表中存储的数据,key 是商品的类型,value 是生产这个商品的工厂。在生产商品的时候,直接根据商品类型从表中获得商品对应的工厂,然后通过工厂生产商品。如果没有表的话,那么类型判断和工厂

    2024年03月14日
    浏览(78)
  • 【C++ 设计模式】策略模式与简单工厂模式的结合

    在软件设计中,常常会遇到需要根据不同情况选择不同算法或行为的情况。策略模式和简单工厂模式是两种常见的设计模式,它们分别解决了对象行为的抽象和对象创建的抽象问题。在某些情况下,将这两种模式结合起来可以更好地满足实际需求,提高代码的灵活性和可维护

    2024年03月16日
    浏览(40)
  • C++设计模式_04_Strategy 策略模式

    接上篇,本篇将会介绍C++设计模式中的 Strategy 策略模式 ,和上篇 模板方法Template Method 一样,仍属于“组件协作”模式,它与Template Method有着异曲同工之妙。 在软件构建过程中,某些对象使用的算法可能多种多样ÿ

    2024年02月09日
    浏览(31)
  • java设计模式---策略模式

    策略设计模式是一种行为设计模式。当在处理一个业务时,有多种处理方式,并且需要再运行时决定使哪一种具体实现时,就会使用策略模式。 策略模式的类图: 在支付业务中,有三种付款方式,程序运行时使用哪种方式由用户选择,根据用户选择执行不同的逻辑。 首先,

    2024年02月10日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包