• 设计模式之组合模式(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;
    }
    
  • 相关阅读:
    sql中table用法
    sql group by
    C#excel导入
    手写简单JDBC
    连接池+事务
    mysql+jdbc
    mysql(多表)
    jsp标签+jstl
    页面跳转+路径问题
    ajax 动态获取数据库中的值
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3204576.html
Copyright © 2020-2023  润新知