设为首页 加入收藏

TOP

[学习笔记]设计模式之Composite(二)
2019-09-03 03:21:44 】 浏览:29
Tags:学习 笔记 设计模式 Composite
aponBag等等。我们可以简单地来模拟订制一个能够保卫领土的战斗机器人:

 1 ProtoBody* body = new ProtoBody("A strong and tough body");
 2 
 3 WeaponBag* bag = new WeaponBag("Weapon bag");
 4 bag->add(new Weapon("Sharpen Sword"));
 5 bag->add(new Shield("Hard Shield"));
 6 
 7 body->add(bag);
 8 body->add(new Drive("Fight For Honor!"));
 9 body->add(new Clothes("Cool Armor"));
10 
11 cout << "The total price is " << body->myValue() << endl;

对于我们的设计可以看下面这张图:

特点总结

从上面我们可以看到,Composite模式有如下一些特点:

  1. Composite模式定义了包含基本对象和组合对象的类层次结构。基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断的递归下去。客户代码中,任何用到基本对象的地方都可以使用组合对象。
  2. 简化客户代码。客户可以一致地使用组合结构和单个对象。通常用户不知道(也不关心)处理的是一个叶节点还是一个组合组件。这就简化了客户代码, 因为在定义组合的那些类中不需要写一些充斥着选择语句的函数。
  3. 使得更容易增加新类型的组件
  4. 使我们的设计变得更加一般化

同时,我们在实现的时候需要注意以下几点:

  1. 显式的父部件引用。这可以简化组合结构的遍历和管理。
  2. 共享组件。一般来说这都很有用,比如它可以减少对存贮的需求。
  3. 最大化Component接口。因为它的目的是使得用户不知道他们正在使用的到底是Leaf还是Composite,因此,Component应尽量多定义一些公共操作。
  4. 注意子部件的排序问题。
  5. 使用高速缓冲存贮改善性能,特别是当我们需要对组合进行频繁的遍历或查找。

写在最后

今天的笔记就到这里了,欢迎大家批评指正!如果觉得可以的话,好文推荐一下,我会非常感谢的!

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇BS与CS的联系与区别 下一篇【.NET】单例模式标准写法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目