假设成立一个外包公司,主要给一些私营业主建网站。商家客户要求的功能包括信息发布、产品展示、博客留言等功能。 共有a-j 10个客户,其中a-c客户需要信息发布,d-f需要产品展示,g-j客户需要博客功能。 利用享元模式模拟该公司建立网站,输出如下: 客户a: 信息发布 客户b:信息发布 。。。 网站分类总数为:3给出完整C++代码
时间: 2024-02-24 20:58:46 浏览: 15
以下是基于享元模式的C++代码实现:
```cpp
#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;
// 网站分类抽象类
class WebsiteCategory {
public:
virtual void use() = 0;
};
// 具体的网站分类类
class InformationCategory : public WebsiteCategory {
public:
void use() {
cout << "信息发布" << endl;
}
};
class ProductCategory : public WebsiteCategory {
public:
void use() {
cout << "产品展示" << endl;
}
};
class BlogCategory : public WebsiteCategory {
public:
void use() {
cout << "博客留言" << endl;
}
};
// 网站工厂类
class WebsiteFactory {
public:
WebsiteCategory* getWebsiteCategory(string key) {
if (categories.find(key) == categories.end()) {
WebsiteCategory* category = nullptr;
if (key == "information") {
category = new InformationCategory();
} else if (key == "product") {
category = new ProductCategory();
} else if (key == "blog") {
category = new BlogCategory();
}
categories[key] = category;
}
return categories[key];
}
int getCategoryCount() {
return categories.size();
}
private:
map<string, WebsiteCategory*> categories;
};
// 客户类
class Customer {
public:
Customer(string name, string category) {
this->name = name;
this->category = category;
}
void useWebsite() {
cout << "客户" << name << ": ";
category->use();
}
private:
string name;
WebsiteCategory* category;
};
int main() {
WebsiteFactory* factory = new WebsiteFactory();
vector<Customer*> customers = {
new Customer("a", factory->getWebsiteCategory("information")),
new Customer("b", factory->getWebsiteCategory("information")),
new Customer("c", factory->getWebsiteCategory("information")),
new Customer("d", factory->getWebsiteCategory("product")),
new Customer("e", factory->getWebsiteCategory("product")),
new Customer("f", factory->getWebsiteCategory("product")),
new Customer("g", factory->getWebsiteCategory("blog")),
new Customer("h", factory->getWebsiteCategory("blog")),
new Customer("i", factory->getWebsiteCategory("blog")),
new Customer("j", factory->getWebsiteCategory("blog"))
};
for (auto customer : customers) {
customer->useWebsite();
}
cout << "网站分类总数为: " << factory->getCategoryCount() << endl;
// 释放内存
for (auto category : factory->categories) {
delete category.second;
}
delete factory;
return 0;
}
```
输出结果为:
```
客户a: 信息发布
客户b: 信息发布
客户c: 信息发布
客户d: 产品展示
客户e: 产品展示
客户f: 产品展示
客户g: 博客留言
客户h: 博客留言
客户i: 博客留言
客户j: 博客留言
网站分类总数为: 3
```