composite模式

Composite模式

一.意图

将对象组合成树形结构以表示部分-整体的层次结构,composite使得用户对单个对象和组合对象的使用具有一致性.

二.适用性

1.    你想表示对象的部分-整体层次结构

2.    你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象

三.结构

 

 

 四.代码

#include<iostream>

#include<stdio.h>

#include<stdlib.h>

usingnamespacestd;

//compositemode

classCComponent

{

public:

    virtualvoidDisplayOperation(){}

    virtualvoidAdd(CComponent*component){}

    virtualvoidRemove(CComponent*component){}

    virtualstringGetName(){}

    virtualintGetType(){}

};

 

#defineCOMPOSITENUM    10

classCComposite:publicCComponent

{

private:

    stringm_name="NULLNAME";

    intm_index=0;

    CComposite**m_pArray=NULL;

    intm_type=0;

 

public:

    CComposite(stringname)

    {

        m_name=name;

        m_pArray=(CComposite**)malloc(sizeof(CComposite*)*COMPOSITENUM);

    }

 

    ~CComposite()

    {

        if(m_pArray!=NULL)

        {

            deletem_pArray;

            m_pArray=NULL;

        }

    }

 

    voidAdd(CComponent*component)

    {

        if(m_index<COMPOSITENUM)

        {

            m_pArray[m_index]=(CComposite*)component;

            m_index++;

        }

        else

        {

            cout<<"maxindex!"<<endl;

        }

    }

 

    stringGetName()

    {

        returnm_name;

    }

 

    intGetType()

    {

        returnm_type;

    }

 

    voidDisplayOperation()

    {

        cout<<"displaycompositebegin:name="<<m_name<<"type="<<m_type<<endl;

        for(inti=0;i<m_index;i++)

        {

            cout<<"i="<<i<<"name="<<m_pArray[i]->GetName()<<"type="<<m_pArray[i]->GetType()<<endl;

        }

        cout<<"displaycompositeend"<<endl;

    }

};

 

classCLeaf:publicCComponent

{

public:

    CLeaf(stringname)

    {

        m_name=name;

    }

    stringGetName()

    {

        returnm_name;

    }

    intGetType()

    {

        returnm_type;

    }

    voidDisplayOperation()

    {

        cout<<"leafname="<<GetName()<<"type="<<m_type<<endl;

    }

private:

    stringm_name="NULLNAME";

    intm_type=1;

};

 

 

intmain()

{

    cout<<"HelloWorld!"<<endl;

    CComponent*composite1=newCComposite("composite1");

    CComponent*composite2=newCComposite("composite2");

    CComponent*composite3=newCComposite("composite3");

    CComponent*leaf1=newCLeaf("leaf1");

    CComponent*leaf2=newCLeaf("leaf2");

    CComponent*leaf3=newCLeaf("leaf3");

 

    composite1->Add(leaf1);

    composite1->Add(leaf2);

    composite1->DisplayOperation();

    composite2->Add(leaf3);

    composite3->Add(composite1);

    composite3->Add(composite2);

    composite3->DisplayOperation();

    return0;

}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值