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

石狮网站建设报价常州网站推广排名

石狮网站建设报价,常州网站推广排名,免费签名设计,seo人才组合模式(Composite Pattern)允许将对象组合成树形结构,使得客户端以统一的方式处理单个对象和组合对象。以下是一个经典的 C 实现示例,包含透明式设计(基类定义统一接口)和内存管理: #include…

组合模式(Composite Pattern)允许将对象组合成树形结构,使得客户端以统一的方式处理单个对象和组合对象。以下是一个经典的 C++ 实现示例,包含透明式设计(基类定义统一接口)和内存管理:

#include <iostream>
#include <vector>
#include <algorithm>
#include <stdexcept>
#include <memory>// 抽象组件类
class Component {
public:virtual ~Component() = default;virtual void operation() const = 0;// 管理子组件的透明接口(Leaf需处理不支持的操作)virtual void add(std::unique_ptr<Component> component) {throw std::runtime_error("Unsupported operation: add");}virtual void remove(Component* component) {throw std::runtime_error("Unsupported operation: remove");}virtual const Component* getChild(int index) const {throw std::runtime_error("Unsupported operation: getChild");}
};// 叶子节点类
class Leaf : public Component {
public:explicit Leaf(std::string name) : name_(std::move(name)) {}void operation() const override {std::cout << "Leaf[" << name_ << "] 执行操作" << std::endl;}private:std::string name_;
};// 组合节点类
class Composite : public Component {
public:void operation() const override {std::cout << "Composite 执行操作,包含" << children_.size() << "个子组件:" << std::endl;for (const auto& child : children_) {child->operation(); // 递归调用子组件的操作}}void add(std::unique_ptr<Component> component) override {children_.push_back(std::move(component));}void remove(Component* component) override {auto it = std::find_if(children_.begin(), children_.end(),[component](const std::unique_ptr<Component>& c) {return c.get() == component;});if (it != children_.end()) {children_.erase(it);}}const Component* getChild(int index) const override {if (index >= 0 && index < children_.size()) {return children_[index].get();}return nullptr;}private:std::vector<std::unique_ptr<Component>> children_; // 使用智能指针管理生命周期
};// 客户端代码
int main() {// 创建组合结构:root -> [branch1, branch2]// branch1 -> [leaf1, leaf2]// branch2 -> [leaf3]auto root = std::make_unique<Composite>();auto branch1 = std::make_unique<Composite>();branch1->add(std::make_unique<Leaf>("A"));branch1->add(std::make_unique<Leaf>("B"));auto branch2 = std::make_unique<Composite>();branch2->add(std::make_unique<Leaf>("C"));root->add(std::move(branch1));root->add(std::move(branch2));// 统一调用操作root->operation();return 0;
}

关键点解析:

  1. 透明式设计

    • Component 基类定义了所有组件(包括叶子节点)的公共接口,包括 add/remove 等管理子组件的方法。
    • 叶子节点 Leaf 继承自 Component,但重写 add/remove 时抛出异常(代码中省略异常以简化,实际可添加)。
    • 组合节点 Composite 实现子组件管理逻辑,并递归调用子组件的 operation()
  2. 内存管理

    • 使用 std::unique_ptr 管理子组件生命周期,确保组合对象析构时自动释放所有子组件。
    • 避免手动 new/delete,减少内存泄漏风险。
  3. 递归结构

    • Compositeoperation() 会遍历所有子组件并调用它们的操作,形成递归处理。

输出结果:

Composite 执行操作,包含2个子组件:
Composite 执行操作,包含2个子组件:
Leaf[A] 执行操作
Leaf[B] 执行操作
Composite 执行操作,包含1个子组件:
Leaf[C] 执行操作

此实现展示了组合模式的核心思想:客户端无需区分叶子节点和组合节点,统一通过 Component 接口操作,简化了复杂树形结构的处理。

http://www.dinnco.com/news/65747.html

相关文章:

  • wordpress在线建站百度竞价登录
  • 赤坎网站开发公司游戏推广员怎么做
  • 专业修真功法网站网站推广优化怎样
  • 凡科建站官网网站模板steam交易链接怎么看
  • 台州网站建设开发seo关键词怎么优化
  • 学网站开发有用么福州seo兼职
  • 达州网站建设yufanse最新病毒感染什么症状
  • 卖房网站排名免费网站推广优化
  • 北京seo网站推广百度搜索关键词规则
  • 国外的调查网站上做问卷公司网址
  • 毕节建设局网站cnn头条新闻
  • php网站连接数据库seo优化的主要任务包括
  • 怎么做网站内的搜索seo关键词排名优化案例
  • 企业网站开发研究现状站长之家seo查找
  • 网站制作上首页百度推广广告收费标准
  • 网站建设设计解决方案百度总部投诉电话
  • 重庆网站建设 cqhtwl百度网址大全在哪里找
  • 专门做lolh的网站西安seo网站关键词
  • 苗木企业网站建设源代码阿里巴巴指数查询
  • wordpress打字不显示图片seo营销技巧
  • jsp做网站案例seo优化效果怎么样
  • 爱站权重qq刷赞网站推广
  • 怎么用视频做网站背景地推项目发布平台
  • 做网站赌博的推广是不是犯罪的网络营销的背景和意义
  • 接做网站的私活怎么报价网店培训教程
  • php网站做语言包恶意点击推广神器
  • 做网站跟做APP哪个容易合肥最新消息今天
  • 高端营销网站建设怎么进入百度推广账户
  • 推广引流渠道有哪些seo技术是什么
  • 做网站前期需求分析收费么南京网站制作公司