zoukankan      html  css  js  c++  java
  • 设计模式之组合模式(Composite)

    组合模式原理:组合模式的作用是讲继承同一父类的不同子类对象组合起来,形成一个树形的结构,例如公司的部门组织

    代码如下

    #include <iostream>
    #include <string>
    #include <list>
    using namespace std;
    
    
    /************************************************************************/
    /* 组合模式的作用是讲继承同一父类的不同子类对象组合起来                 */
    /************************************************************************/
    class Company
    {
    public:
    	Company(string name)
    	{
    		m_name = name;
    	}
    	virtual void  show(int depth)
    	{
    
    	}
    	virtual void Add(Company *pComp)
    	{
    
    	}
    protected:
    	
    	
    	string m_name;
    };
    
    //组合类
    class ConcreteCompany:public Company
    {
    public:
    	ConcreteCompany(string name):Company(name)
    	{
    
    	}
    	virtual void Add(Company *pCompany)
    	{
    		m_ListCompany.push_back(pCompany);
    	}
    	virtual void  show(int depth)
    	{
    		list<Company*>::iterator iter = m_ListCompany.begin();
    		for (;iter != m_ListCompany.end();++iter)
    		{
    			(*iter)->show(depth + 1);
    		}
    	}
    private:
    	list<Company *> m_ListCompany ;
    };
    
    //具体类
    class FinanceDepartment:public Company
    {
    public:
    	FinanceDepartment(string name):Company(name){}
    	virtual void  show(int depth)
    	{
    		for (int i = 0;i < depth;++i)
    		{
    			cout << "-";
    		}
    		cout << m_name << endl;
    	}
    
    };
    class ITDepartment:public Company
    {
    
    public:
    	ITDepartment(string name):Company(name){}
    	virtual void  show(int depth)
    	{
    		for (int i = 0;i < depth;++i)
    		{
    			cout << "-" ;
    		}
    		cout << m_name << endl;
    	}
    };
    int main()
    {
    	Company *root = new ConcreteCompany("总公司");
    	Company *leaf1 = new FinanceDepartment("财务部");
    	Company *leaf2 = new ITDepartment("信息部");
    	root->Add(leaf1);
    	root->Add(leaf2);
    
    	Company *mid = new ConcreteCompany("分公司");
    	Company *mleaf1 = new FinanceDepartment("财务部");
    	Company *mleaf2 = new ITDepartment("信息部");
    	mid->Add(mleaf1);
    	mid->Add(mleaf2);
    	root->Add(mid);
    	root->show(1);
    	
    	return 0;
    }
    
  • 相关阅读:
    超时时间已到。在操作完成之前超时时间已过或服务器未响应 shiney
    C#的映射机制 shiney
    C#用OLEDB导入问题总结 shiney
    SQL中的isnull shiney
    单虚拟机搭建zookeeper集群
    shell与sqlplus交互
    servlet
    迷你MVVM框架 avalonjs 入门教程
    classpath 'com.android.tools.build:gradle:6.7
    new ArrayList json.parse
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3204576.html
Copyright © 2011-2022 走看看