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

网站策划的基本过程西安市商标局

网站策划的基本过程,西安市商标局,威海网站优化公司,企业网站开发课程的能力应用组合模式(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.15wanjia.com/news/192292.html

相关文章:

  • 网站备案注意事项网站开发者工具解读
  • 给传销做网站重庆3号线
  • 吉安知名网站建设wordpress怎么定义不同的侧边栏
  • 购买域名之后怎么做网站站群系统程序
  • 无锡软件网站开发公司江苏微信网站建设
  • seo教育培训机构黑帽seo软件
  • 如何让百度搜索到自己的网站潍坊市做网站
  • h5技术建设网站网站制作技巧017
  • 深圳市招聘信息网站昌宁县住房和城乡建设网站
  • 个人购物网站建设好的兼职做调查网站
  • 周到的网站建设开发小程序的费用明细
  • 中国建设监理官方网站网站加载效果怎么做的
  • dkp网站开发做黏土的网站
  • 如何免费建站网页制作软件案例
  • 长沙购物网站建设王通seo教程
  • 网站品质购物网站介绍
  • 广州易网外贸网站建设视觉设计包括什么
  • 哈尔滨模板建站系统本地做网站图片怎么存
  • 做一个页面网站需要多少钱网站备案号格式说明书
  • 阿里云备案网站备案域名中明建投建设集团 网站
  • 商城网站建设怎么收费做网站数据需要的软件
  • 免费金融发布网站模板下载长安东莞网站设计
  • 凉山彝族自治州网站建站如何查注册商标是别人注册过的
  • 企业网站建设联系电话织梦教育培训网站源码
  • 张家口建设部网站福建建设工程交易中心网站
  • 做网站的要多钱wordpress 图灵机器人
  • 手机传奇手游发布网站鄂州网站建设网络公司
  • 特色专业建设展示网站打开陕西建设厅网站
  • 中远智达网站建设辽宁工程招投标信息网
  • 招聘网站推广怎么做天津网站制作南昌