当前位置: 首页 > wzjs >正文

备案系统新增网站什么网站可以做电影投资

备案系统新增网站,什么网站可以做电影投资,wordpress 什么值得买主题 最新v,室内装修公司哪家好问题背景 在开发一款卡牌游戏时,通常需要定义一个基类 Card,并通过派生类实现数百种不同的卡牌效果。例如,基类可能如下所示: class Card { public:virtual ~Card() default;virtual Card* clone() const 0; // 克隆函数virt…
问题背景

在开发一款卡牌游戏时,通常需要定义一个基类 Card,并通过派生类实现数百种不同的卡牌效果。例如,基类可能如下所示:

class Card {
public:virtual ~Card() = default;virtual Card* clone() const = 0;  // 克隆函数virtual void use() = 0;           // 使用卡牌的效果
};

每个派生类(如 FireballCardShieldCard)都需要重写 cloneuse 方法。若存在几百个派生类,手动编写这些重复的虚函数会极其繁琐。例如:

class FireballCard : public Card {
public:Card* clone() const override { return new FireballCard(*this); }void use() override { /* 火球效果逻辑 */ }
};class ShieldCard : public Card {
public:Card* clone() const override { return new ShieldCard(*this); }void use() override { /* 护盾效果逻辑 */ }
};

这种代码重复不仅效率低下,还难以维护。如何避免这种重复?以下是三种高效的解决方案。

解决方案一:CRTP(奇异递归模板模式)

CRTP(Curiously Recurring Template Pattern) 是一种通过模板继承实现静态多态的技术,可以自动为派生类生成通用方法(如 clone)。

实现步骤

1.定义模板基类
基类通过模板参数接受派生类类型,并实现通用的 clone 方法。

template <typename Derived>
class CRTPCard : public Card {
public:Card* clone() const override {return new Derived(static_cast<const Derived&>(*this));}
};

2.派生类继承模板基类
派生类继承 CRTPCard 并传入自身类型,自动获得 clone 方法。

class FireballCard : public CRTPCard<FireballCard> {
public:void use() override { /* 火球效果逻辑 */ }
};class ShieldCard : public CRTPCard<ShieldCard> {
public:void use() override { /* 护盾效果逻辑 */ }
};

优势

  • 零重复代码:所有派生类无需手动实现 clone
  • 编译期优化:静态多态避免虚函数调用开销。

解决方案二:策略模式(解耦效果逻辑)

若卡牌的效果差异较大(如火球伤害、护盾防御),可以通过策略模式将效果逻辑抽象为独立类,减少派生类数量。

实现步骤

1.定义效果策略接口

class EffectStrategy {
public:virtual ~EffectStrategy() = default;virtual void apply() = 0;virtual EffectStrategy* clone() const = 0;
};

2.实现具体策略

class FireEffect : public EffectStrategy {
public:void apply() override { /* 火球效果 */ }EffectStrategy* clone() const override { return new FireEffect(*this); }
};class ShieldEffect : public EffectStrategy {
public:void apply() override { /* 护盾效果 */ }EffectStrategy* clone() const override { return new ShieldEffect(*this); }
};

3.通用卡牌类组合策略

class UniversalCard : public Card {std::unique_ptr<EffectStrategy> effect_;
public:explicit UniversalCard(EffectStrategy* effect) : effect_(effect) {}Card* clone() const override {return new UniversalCard(effect_->clone());}void use() override { effect_->apply(); }
};

优势

  • 动态组合效果:通过更换策略实现不同卡牌,无需创建大量派生类。
  • 逻辑解耦:效果实现与卡牌类分离,便于扩展。

解决方案三:数据驱动设计(工业化推荐)

对于复杂卡牌效果(如《杀戮尖塔》),可通过数据驱动设计,用配置文件(如JSON)定义卡牌属性,完全消除派生类。

实现步骤

1.定义JSON配置文件

// cards.json
{"fireball": {"cost": 3,"effect": {"type": "damage","value": 5}},"shield": {"cost": 2,"effect": {"type": "defense","duration": 3}}
}

2.解析JSON并生成卡牌
使用 std::variantstd::visit 处理多种效果类型。

struct DamageEffect { int value; };
struct DefenseEffect { int duration; };
using Effect = std::variant<DamageEffect, DefenseEffect>;class DataDrivenCard : public Card {Effect effect_;
public:DataDrivenCard(const Effect& effect) : effect_(effect) {}Card* clone() const override { return new DataDrivenCard(effect_); }void use() override {std::visit([](auto&& e) {// 根据效果类型执行逻辑if constexpr (std::is_same_v<decltype(e), DamageEffect>) {dealDamage(e.value);} else if (std::is_same_v<decltype(e), DefenseEffect>) {addDefense(e.duration);}}, effect_);}
};

优势

  • 零派生类:通过配置而非代码定义卡牌。
  • 灵活迭代:修改配置文件即可调整卡牌效果,无需重新编译。

总结

方案适用场景优势
CRTP需要减少虚函数重复的简单派生类编译期优化,代码简洁
策略模式效果差异大的卡牌逻辑解耦,扩展性强
数据驱动工业化项目,需动态配置卡牌效果高度灵活,维护成本低

文章转载自:

http://LflZxmSC.kjnfs.cn
http://NXvJlpb0.kjnfs.cn
http://U9VnLDpJ.kjnfs.cn
http://AeFWGeEf.kjnfs.cn
http://zqNF3NFJ.kjnfs.cn
http://GeRoAFe0.kjnfs.cn
http://vB9IPwkx.kjnfs.cn
http://s3sJsONu.kjnfs.cn
http://FlKZn3vT.kjnfs.cn
http://uJsPHWig.kjnfs.cn
http://5wYA7pxy.kjnfs.cn
http://JXTd6utt.kjnfs.cn
http://TfJokNzF.kjnfs.cn
http://4ttOMqyL.kjnfs.cn
http://r35d9pm6.kjnfs.cn
http://F6eOJdKm.kjnfs.cn
http://C2BNYFpO.kjnfs.cn
http://DONH3mFO.kjnfs.cn
http://MJAu9YVA.kjnfs.cn
http://Zj1AR4FZ.kjnfs.cn
http://FlvavyCo.kjnfs.cn
http://O0mf0qvS.kjnfs.cn
http://FrQLanJl.kjnfs.cn
http://W60cBojZ.kjnfs.cn
http://fOhybOGl.kjnfs.cn
http://p407YPka.kjnfs.cn
http://beiz4GlH.kjnfs.cn
http://Nvf59wOQ.kjnfs.cn
http://QRMDIZqj.kjnfs.cn
http://9Nufc0sp.kjnfs.cn
http://www.dtcms.com/wzjs/630879.html

相关文章:

  • 专题网站建设自查整改报告杭州seo托管公司推荐
  • 可以申请免费的个人网站吗郑州优化网站
  • 企业网页策划案网站优化制作
  • 三亚网站建设哪家专业网站制作现状解决方案
  • 大理旅游网站建设建站之星管理中心
  • 沈阳seo网站推广东莞市网络seo推广哪家好
  • 深圳 网站优化公司排名如何建立自己的网站
  • 微信网站怎么制作企业网络推广方案
  • 成都建设局网站首页网站建设 海豚弯
  • 网站如何做地推沈阳建设企业网站
  • 灯箱网站开发沈阳工程信息网官网
  • wap建站程序合集中企动力公司是做什么的
  • 做电商设计在哪个网站接单深圳做微商网站制作
  • 网站宣传活动怎么做apache网站拒绝访问
  • 企业网站推广的目的网站结构
  • 网站分站加盟网级移动营销app下载
  • 网站怎么改域名优秀国外网站设计赏析
  • 绿色系的网站网站建设傲鸿
  • ps做网站界面asp.net 个人网站
  • 专做美妆的视频网站网站建设藤设计
  • 网站任务界面一起做网站女装夏季裙
  • 网站后台如何修改新闻发布时间跨界营销案例
  • 做网站排名软件做商城网站企业
  • js实现网站浮动窗口海东市城市规划建设局网站
  • 网站开发的目的 实习报告进入淘宝官网网站
  • 兖州中材建设有限公司网站网站建设优化服务价位
  • 松江新城建设集团有限公司网站iis 搭建wordpress
  • 成都哪些公司可以做网站最方便建立网站
  • 单页面个人网站神农架网页设计
  • html5国外网站模板html源码下载wordpress淘宝客个人中心