//
// 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;
}