//
// Created by win10 on 2021/11/16.
//
#include <iostream>
#include <vector>
using namespace std;
/*
* 享元模式
*/
class WebSite {
public:
virtual void use() = 0;
};
class ConcreteWebSite: public WebSite {
public:
ConcreteWebSite(string name): m_name(name) {}
virtual void use() {
std::cout << "web div: " << this->m_name << std::endl;
}
private:
string m_name;
};
class UnShareWebSite: public WebSite {
public:
UnShareWebSite(string name): m_name(name) {}
virtual void use() {
std::cout << __FUNCTION__ << ": " << this->m_name << std::endl;
}
private:
string m_name;
};
class WebFactory {
public:
WebSite* getWeb() {
return *(this->websites.begin());
}
WebFactory() {
websites.push_back(new ConcreteWebSite("test"));
}
private:
vector<WebSite*> websites;
};
int main() {
WebFactory* factory = new WebFactory();
WebSite* webSite = factory->getWeb();
webSite->use();
WebSite* webSite2 = factory->getWeb();
webSite2->use();
// 不共享的类
WebSite* webSite3 = new UnShareWebSite("test");
webSite3->use();
return 0;
}