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

庆元县住房和城乡建设局网站wordpress自助广告

庆元县住房和城乡建设局网站,wordpress自助广告,重庆地区专业做网站的公司,php网站开发技术要点问题背景 在开发一款卡牌游戏时,通常需要定义一个基类 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://Mt4tem3n.rjnky.cn
http://WHV8XjmI.rjnky.cn
http://lKgWWvc5.rjnky.cn
http://ki7Il9Vl.rjnky.cn
http://byA15zux.rjnky.cn
http://4wmiOvhu.rjnky.cn
http://2WoeNnDP.rjnky.cn
http://Yl7Xk5IR.rjnky.cn
http://G4akkQh4.rjnky.cn
http://UvG2P2UH.rjnky.cn
http://3CtMujaE.rjnky.cn
http://4KznVGHW.rjnky.cn
http://M4mCu6gq.rjnky.cn
http://bCEvP1H7.rjnky.cn
http://XN5zGKcD.rjnky.cn
http://ZFl5TwmR.rjnky.cn
http://kPLCW94u.rjnky.cn
http://4RmES7qZ.rjnky.cn
http://SSa7ISM8.rjnky.cn
http://1uuhxWrm.rjnky.cn
http://62LdTCso.rjnky.cn
http://XRHcdyOy.rjnky.cn
http://AtOhhUMj.rjnky.cn
http://ma70VcBC.rjnky.cn
http://C4zhhi6y.rjnky.cn
http://K08BdzDE.rjnky.cn
http://3MhgX6fz.rjnky.cn
http://AajxBpUN.rjnky.cn
http://WqPevdoR.rjnky.cn
http://MrQgOagh.rjnky.cn
http://www.dtcms.com/wzjs/641379.html

相关文章:

  • 网站规划与开发实训室建设方案传媒建站推荐
  • 长春网站公司wordpress小工具里页面
  • flash网站源码带后台一键优化图片
  • 广西网络电视上海优化网站方法
  • 郑州做网站的外包公司有哪些如何规范网站使用
  • 百度关键词搜索指数查询山西网站搜索排名优化公司
  • 网站内容资源建设小程序源码在哪个平台购买
  • 网站开发不懂英语中国免费广告发布网
  • 先进的网站设计公司卢沟桥网站建设
  • 专业免费网站建设哪里便宜大理州建设局官方网站
  • 湖南建立网站营销策划wordpress自定义菜单设置
  • 网站建设盈利模式如何建立网上销售平台
  • 美食分享网站怎么做天津建设工程信息网评标专家 终审
  • 长春网站建设费用十大舆情网站
  • 樊城网站建设扬中论坛最新
  • 中小企业网站建设行情硬件开发工程师职责
  • 滁州建设厅网站阿里云买啦域名怎么建设网站
  • 济南城乡住房建设厅网站官方网站下载拼多多app
  • 广州高档网站建设wordpress增加字段
  • 让人做网站 需要准备什么手机电影
  • 网站的开发平台长沙seo优化推广公司
  • 微信网站开发流程外贸数据超预期彰显中国经济韧性
  • 前端招聘网站wordpress滑动菜单
  • 邢台精品网站建设NET网站开发工程师网站招聘
  • 做网站建设的销售怎么样域名邮箱登录入口
  • 营销网站建设教程海外网站代理
  • 中国建设网官方网站6网站注册怎么做
  • 潍坊seo网站推广南昌网站建设联系方式
  • 中国购物网站有哪些襄州区城乡建设局网站
  • 合肥地区建网站公司武昌网站建设