//cli_h
#include "look.h"
#include <string>
#include <iostream>
using namespace std;
class cli
{
public:
~cli();
cli();
virtual void update(class service* serv) = 0;
protected:
string _page;
};
class ClienterA :public cli
{
public:
~ClienterA();
ClienterA(class service *serv);
virtual service* getservice();
void update(class service *serv);
private:
class service* _serv;
};
class ClienterB :public cli
{
public:
~ClienterB();
ClienterB(class service* serv);
virtual service* getservice();
void update(class service* serv);
private:
class service* _serv;
};
//servers_h
#include <list>
#include <string>
using namespace std;
using std::list;
class cli;
class service
{
public:
~service();
service();
virtual void register_cli(class cli *people);
virtual void remove_cli(class cli *people);
virtual void noticefy();
virtual void set_page(const string &data) = 0;
virtual string get_page() = 0;
private:
list<class cli *>* all;
};
class servers:public service
{
public:
~servers();
servers();
void set_page(const string& data);
string get_page();
private:
string page;
};
//cli_cpp
#include "cli.h"
#include "servers.h"
cli::cli()
{
_page = "";
}
cli::~cli()
{
}
ClienterA::ClienterA(class service* serv)
{
_serv = serv;
_serv->register_cli(this);
}
ClienterA::~ClienterA()
{
_serv->remove_cli(this);
}
class service* ClienterA::getservice()
{
return _serv;
}
void ClienterA::update(class service* serv)
{
_page = _serv->get_page();
cout << _page << endl;
}
ClienterB::ClienterB(class service* serv)
{
_serv = serv;
_serv->register_cli(this);
}
ClienterB::~ClienterB()
{
_serv->remove_cli(this);
}
class service* ClienterB::getservice()
{
return _serv;
}
void ClienterB::update(class service* serv)
{
_page = _serv->get_page();
cout << _page << endl;
}
int main()
{
class servers* serv = new class servers();
class ClienterA *clientera = new ClienterA(serv);
class ClienterB *clienterb = new ClienterB(serv);
serv->set_page("abcd\n");
serv->noticefy();
}
//servers.cpp
#include "servers.h"
#include "cli.h"
service::service()
{
all = new list<class cli*>;
}
service::~service()
{
}
void service::register_cli(class cli* people)
{
all->push_front(people);
}
void service::remove_cli(class cli* people)
{
all->remove(people);
}
void service::noticefy()
{
list<class cli*>::iterator iter;
iter = all->begin();
for (; iter != all->end(); iter++)
{
(*iter)->update(this);
}
}
servers::servers()
{
page = "";
}
servers::~servers()
{
}
void servers::set_page(const string& data)
{
page = data;
}
string servers::get_page()
{
return page;
}