觀察者模式

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章