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

湖南湘信建设工程有限公司网站wex5可以做网站吗

湖南湘信建设工程有限公司网站,wex5可以做网站吗,英选 网站开发,网站后台上传内容前台首页不显示设计模式 17 组合模式 Composite Pattern 1.定义 组合模式#xff08;Composite Pattern#xff09;#xff0c;又叫部分整体模式#xff0c;是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象#xff0c;用来表示部分以及整体层次。这种类型的设…设计模式 17 组合模式 Composite Pattern 1.定义 组合模式Composite Pattern又叫部分整体模式是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象用来表示部分以及整体层次。这种类型的设计模式属于结构型模式它创建了对象组的树形结构。 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。它允许你将对象组合成树形结构以表示“部分-整体”层次关系。它将单个对象和组合对象都视为相同类型的对象从而使你能够统一地处理它们 核心思想: 将单个对象和组合对象都视为相同类型的对象即它们都实现相同的接口或抽象类。 组合对象可以包含其他对象形成树形结构。 客户端代码可以统一地处理单个对象和组合对象。 2.内涵 组合模式的内涵在于它提供了一种 统一处理单个对象和组合对象 的方法从而简化代码、提高可扩展性和可重用性。 核心内涵 树形结构: 组合模式的核心是构建一个树形结构以表示“部分-整体”层次关系。树的节点可以是单个对象叶子节点或组合对象非叶子节点。统一接口: 组合模式要求所有组件包括单个对象和组合对象都实现相同的接口或抽象类。这使得客户端代码可以统一地处理所有组件而无需关心它们是单个对象还是组合对象。递归操作: 组合模式通常使用递归来处理组合对象。当对组合对象进行操作时它会递归地对它的子组件进行相同操作。简化代码: 由于所有组件都具有相同的接口客户端代码可以统一地处理它们避免了对不同类型对象的特殊处理。提高可扩展性: 可以轻松地添加新的组件类型而无需修改现有代码。因为新的组件只需要实现相同的接口即可。增强灵活性和可重用性: 可以灵活地组合不同的组件以创建不同的结构并可以将这些结构重用在不同的场景中 3.案例分析 #include algorithm #include iostream #include list #include stringclass Component {/*** var Component*/protected:Component *parent_;public:virtual ~Component() {}void SetParent(Component *parent) {this-parent_ parent;}Component *GetParent() const {return this-parent_;}virtual void Add(Component *component) {}virtual void Remove(Component *component) {}virtual bool IsComposite() const {return false;}virtual std::string Operation() const 0; };class Leaf : public Component {public:std::string Operation() const override {return Leaf;} };class Composite : public Component {protected:std::listComponent * children_;public:void Add(Component *component) override {this-children_.push_back(component);component-SetParent(this);}void Remove(Component *component) override {children_.remove(component);component-SetParent(nullptr);}bool IsComposite() const override {return true;}std::string Operation() const override {std::string result;for (const Component *c : children_) {if (c children_.back()) {result c-Operation();} else {result c-Operation() ;}}return Branch( result );} };void ClientCode(Component *component) {// ...std::cout RESULT: component-Operation();// ... }void ClientCode2(Component *component1, Component *component2) {// ...if (component1-IsComposite()) {component1-Add(component2);}std::cout RESULT: component1-Operation();// ... }int main() {Component *simple new Leaf;std::cout Client: Ive got a simple component:\n;ClientCode(simple);std::cout \n\n;Component *tree new Composite;Component *branch1 new Composite;Component *leaf_1 new Leaf;Component *leaf_2 new Leaf;Component *leaf_3 new Leaf;branch1-Add(leaf_1);branch1-Add(leaf_2);Component *branch2 new Composite;branch2-Add(leaf_3);tree-Add(branch1);tree-Add(branch2);std::cout Client: Now Ive got a composite tree:\n;ClientCode(tree);std::cout \n\n;std::cout Client: I dont need to check the components classes even when managing the tree:\n;ClientCode2(tree, simple);std::cout \n;delete simple;delete tree;delete branch1;delete branch2;delete leaf_1;delete leaf_2;delete leaf_3;return 0; } 以上代码UML图如下所示 4.注意事项 在使用组合模式进行开发时需要考虑以下几个注意事项 1. 避免循环引用: 组合模式中组件之间可以相互嵌套形成树形结构。如果出现循环引用会导致无限递归最终导致程序崩溃。 例如文件夹 A 包含文件夹 B文件夹 B 又包含文件夹 A就会形成循环引用。 避免循环引用的方法是仔细设计组件之间的关系确保没有相互依赖的循环。 2. 谨慎使用递归: 组合模式中通常使用递归来处理组合对象。递归虽然方便但可能会导致栈溢出尤其是在处理大型树形结构时。 为了避免栈溢出可以考虑使用迭代的方式来代替递归或者使用尾递归优化。 3. 考虑性能: 组合模式中对组合对象的访问可能会涉及多个子组件的访问因此需要考虑性能问题。 为了提高性能可以考虑使用缓存机制或者使用更轻量级的结构来代替树形结构。 4. 确保接口的完整性: 组合模式中所有组件都必须实现相同的接口。因此需要确保接口的完整性包含所有必要的操作方法。 接口应该尽可能地抽象避免与具体实现细节相关联。 5. 避免过度使用: 组合模式是一种强大的模式但它并不适合所有场景。如果你的系统结构比较简单或者没有明显的“部分-整体”层次关系则不需要使用组合模式。 在选择设计模式时需要权衡利弊选择最适合的模式 5.最佳实践 组合模式是一个强大的工具但要有效地运用它需要遵循一些最佳实践 1. 明确“部分-整体”层次关系: 首先要确保你的系统中存在明显的“部分-整体”层次关系。例如文件系统中的文件夹和文件组织结构中的部门和员工图形界面中的容器和组件等。 只有在存在这种层次关系的情况下组合模式才能发挥其优势。 2. 设计清晰的组件接口: 定义一个抽象的 Component 接口所有组件包括单个对象和组合对象都必须实现这个接口。 接口应该包含所有必要的操作方法例如 add(), remove(), getChild(), getName(), getSize() 等这些方法应该能够适用于所有类型的组件。 3. 确保接口的完整性: 接口应该尽可能地抽象避免与具体实现细节相关联。 同时接口应该包含所有必要的操作方法以支持所有可能的用例。 4. 谨慎使用递归: 递归是处理组合对象的一种常见方式但它可能会导致栈溢出尤其是在处理大型树形结构时。 可以考虑使用迭代的方式来代替递归或者使用尾递归优化。 5. 考虑性能: 在处理大型树形结构时性能是一个重要因素。 可以考虑使用缓存机制或者使用更轻量级的结构来代替树形结构。 6. 避免过度使用: 组合模式并不适合所有场景。如果你的系统结构比较简单或者没有明显的“部分-整体”层次关系则不需要使用组合模式。 在选择设计模式时需要权衡利弊选择最适合的模式。 7. 使用示例代码进行验证: 在实际应用中可以使用示例代码来验证组合模式的实现是否符合预期。 通过测试用例可以确保组合模式能够正确地处理各种情况。 6.总结 组合模式的内涵在于它通过统一接口和递归操作将单个对象和组合对象统一起来简化了代码提高了可扩展性和可重用性。它为构建灵活、可扩展和可重用的树形结构提供了强大的支持。
http://www.yayakq.cn/news/5392/

相关文章:

  • 导航类网站怎么做排名温州做企业网站
  • 会做网站怎么赚钱wordpress移动端显示
  • 太原网站制作案例wordpress新建页面显示数据
  • 贵阳h5网站建设古风头像在线制作免费
  • 深圳住房和建设局网站在哪个网网站建设与管理 需求分析
  • 网站可以自己做服务器么汕头生态建设典型案例
  • 湛江建站公司模板wordpress在php什么版本
  • 郑州网站营销推广公司有没有在线看片资源
  • 东莞做网站沃德东莞做工业产品网站建设
  • 教育网站建设平台店铺代运营服务
  • 网页制作与网站建设教程wordpress 文件管理插件
  • 东莞网站建设(信科分公司)网站域名证书
  • 手表网站 海马300米潜水表企业网站怎样做seo优化 应该如何做
  • 视觉差的网站做电商网站需要会些什么条件
  • php网站开发有什么优点wordpress标签生成图片
  • 如何网站制作微信公众号网站自己做导航条
  • 郑州做网站公司有多少钱德州做网站建设的公司
  • 网站做游戏活动阿里云服务器ip做网站
  • 网站设计报价.doc做网站 合肥
  • 阿里云轻应用服务器 建设网站网站内页是什么意思
  • 成都网站建设详细内容这么做输入文字的网站
  • 宁波网站推广优化外包公司asp.net 网站提速
  • uemo网站平台建设免费制作软件app的网站
  • 电影推荐网站开发口碑营销的优缺点
  • 台州建网站网页设计案例教程杨松答案
  • 番禺市桥网站建设网站建设计划设计方案
  • wap自助建站排板网络运营推广方式有哪些
  • 厦门网站建设公司推荐密云网站建设
  • 深圳好的网站建安丘做网站的公司
  • 电子商务网站建设的评估邢台163信息交友