设计模式之---组合模式

组合模式,是众多的结构性模式中的一种,想比较之前的桥接模式以及适配器模式,在理解上会有稍稍的难度。

       从组合模式的介绍上来看的话,其实还是不甚了解,以前学过的数据结构中的树的概念到还能够想起来一些。

       从网上看到的一些关于这个模式的解释,也都是一些没有说到重要地方的解释,看起来一大堆的东西,基本上没有讲清楚。既然如此麻烦,索性直接自己来通过代码来理解还好点。

       所谓的树型结构和树枝等等概念看起来也比较麻烦。但是从代码上还是了解到了一些东西。所以就根据自己的所了解的程度进行类图的绘制。


       从上面可以知道,作为树枝节点的部分虽然也是继承根节点的,但是在使用上是属于组合方式提供给树枝节点使用。

       相当于提供这样一种情况,就是当一些对象进行组合使用和单独的继承都是我需要的情况下,才会采用这种模式。例如,在现在的娱乐公司里面,往往会推出一些单独的歌手,自然也会推出一些组合的歌手。而这样的模式自然就是属于组合模式了。虽然每个歌手不管是单独的艺人还是组合中的任何一个,都是属于歌手中的一个子类。但是,当公司进行调用的时候,往往这两种情况是不同的,因为就需要推出一些组合和一些单独演唱的歌手了。

       从上面的例子,再举一个实际的代码示例吧。

#pragma once
#include"root.h"
//单飞歌手
class leaf:publicroot
{
public:
       leaf(void);
       ~leaf(void);
public:
       voidSinger();
};
 
#include "root.h"
#include <vector>
class compoment:publicroot
{
public:
       compoment(void);
       ~compoment(void);
public:
       voidSinger();
private:
       std::vector<root*> psinger;
};
 


程序的运行结果如下。

      

这里需要值得注意一个问题,在树枝节点的上往往会有叶子节点,而叶子节点的调用方式正是以组合方式调用的。由于调用的方式正是以多个叶子节点一并调用的方式进行的,所以在调用叶子节点的时候,往往要做一些特殊处理的。

而且,这个调用方式在其他的模式中也是暂时没有看到的,是这个模式的一种特殊的地方,整个组合模式而言,最需要特别注意的地方就是这里了。

在上述的类图中,树枝节点对于根节点的调用就是一种组合方式,在实际操作中,就是通过成员变量的方式进行批量的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值