当前位置:编程学习 > C/C++ >>

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

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

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

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

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

 

 \

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

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

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


[cpp]
<SPAN style="FONT-SIZE: 14px">#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; 
}; 
 </SPAN> 

#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;
};
 

 

程序的运行结果如下。

     \

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

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

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

 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,