#include <QCoreApplication>
#include <iostream>
#include <list>
using namespace std;
class Company
{
public:
Company(string name)
{
m_name = name;
}
virtual void Add(Company *company) = 0;
virtual void Display(int d) = 0;
virtual void Duty() = 0;
public:
string m_name;
};
class ConCompany: public Company
{
private:
list<Company*> comList;
public:
ConCompany(string name):Company(name){}
void Add(Company *company) override
{
comList.push_back(company);
}
void Display(int d) override
{
for(int i = 0; i < d; i++)
{
qDebug() << "-";
}
qDebug() << QString::fromUtf8(m_name.c_str()) << Qt::endl;
for(auto e : comList)
{
e->Display(d + 1);
}
}
void Duty() override
{
for(const auto &e : comList)
{
e->Duty();
}
}
};
class TechPart : public Company
{
public:
TechPart(string name) : Company(name){ }
void Add(Company *company) override{}
void Display(int d) override
{
for(int i = 0; i < d; i++)
{
qDebug() << "-";
}
qDebug() << QString::fromUtf8(m_name.c_str()) << Qt::endl;
}
void Duty() override
{
qDebug() << QString::fromUtf8(m_name.c_str()) << ": 各项产品的技术研发与生产" << Qt::endl;
}
};
class OperaPart : public Company
{
public:
OperaPart(string name) : Company(name){}
void Add(Company *company) override {}
void Display(int d) override
{
for (int i = 0; i < d; ++ i)
{
qDebug() << "-";
}
qDebug() << QString::fromUtf8(m_name.c_str()) << Qt::endl;
}
void Duty() override
{
qDebug() << QString::fromUtf8(m_name.c_str()) << ": 产品运营与销售" << Qt::endl;
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Company *root = new ConCompany("总公司");
root->Add(new TechPart("总公司技术部"));
root->Add(new OperaPart("总公司运营部"));
Company *company = new ConCompany("分公司");
root->Add(company);
company->Add(new TechPart("分公司技术部"));
company->Add(new OperaPart("分公司运营部"));
Company *company1 = new ConCompany("分公司Aux办事处");
company->Add(company1);
company1->Add(new TechPart("分公司Aux办事处技术部") );
company1->Add(new OperaPart("分公司Aux办事处运营部") );
qDebug() << "结构图: " << Qt::endl;
root->Display(1);
qDebug() << "职责: " << Qt::endl;
root->Duty();
delete root;
delete company;
delete company1;
return a.exec();
}
组合模式Demo
最新推荐文章于 2025-12-18 16:28:22 发布
1819

被折叠的 条评论
为什么被折叠?



