C++ 设计模式原理与实战大全-架构师必学课程 | 完结

获课地址:666it.top/14228/

策略模式与装饰器模式:动态行为扩展的艺术

一、策略模式:算法的自由切换

策略模式通过一组策略类与决策者类,实现算法的动态替换。例如角色移动策略:

arduino 复制代码
cpp
class MovementStrategy {
public:
    virtual void Move() = 0;
};
class WalkStrategy : public MovementStrategy {
public:
    void Move() override { std::cout << "Character is walking." << std::endl; }
};
class Character {
private:
    MovementStrategy* currentStrategy;
public:
    Character(MovementStrategy* strategy) : currentStrategy(strategy) {}
    void Move() { currentStrategy->Move(); }
    void SetStrategy(MovementStrategy* strategy) {
        currentStrategy = strategy;
    }
};

应用场景:游戏角色行为切换、排序算法选择。

二、装饰器模式:动态扩展功能

装饰器模式通过装饰器类动态包裹原始组件,实现功能的灵活组合。例如游戏渲染效果叠加:

arduino 复制代码
cpp
class IRenderer {
public:
    virtual void Render() = 0;
};
class BaseRenderer : public IRenderer {
public:
    void Render() override { std::cout << "Base Rendering" << std::endl; }
};
class TextureDecorator : public IRenderer {
private:
    IRenderer* component;
public:
    TextureDecorator(IRenderer* c) : component(c) {}
    void Render() override {
        std::cout << "Applying Texture" << std::endl;
        component->Render();
    }
};

组合调用:

scss 复制代码
cpp
IRenderer* renderer = new TextureDecorator(new BaseRenderer());
renderer->Render(); // 输出 "Applying Texture" 后调用 BaseRenderer::Render()
相关推荐
code_Bo13 分钟前
不只命令行:我把跨 Agent 会话同步做成了桌面应用
前端·javascript·后端
用户8356290780511 小时前
使用 Python 控制 Excel 工作表的分页位置
后端·python
用户8356290780511 小时前
Python 如何在 Word 中添加和管理文档变量
后端·python
量化分析码农2 小时前
股票历史数据的复权参数对照:多级别返回的字段与数值差异
java·javascript·后端
程序员cxuan3 小时前
讲真,智能路由这事儿,还得看基元律动
人工智能·后端·程序员
vaskilab4 小时前
Schema 全绿,Agent 却把参数编造了
后端
Java与AI落地4 小时前
Spring AI 上手:给现有 Java 服务加一个能用的 AI 接口
后端
Swot4 小时前
SvelteKit 数据流研究:`+page.js` 和 `+page.server.js` 到底谁在跑,数据又去了哪儿
前端·后端
一条Go4 小时前
历史告警归档:为什么"删掉主库行"是最后一步
后端·架构·github
nice_lcj5204 小时前
【从零理解 Spring AI · 16】Agent 与工作流:什么该写死,什么该让模型决定
java·人工智能·后端·spring ai·ai应用开发