i have modified the design. now using the observer pattern.
I have implemented for only one layer, the next layer (WebService) i can implement in the same manner.
Code:
struct CEmployee;
class IEmployeeManagerListner;
typedef std::list<CEmployee> EmployeeList;
typedef std::list<IEmployeeManagerListner*> EmployeeManagerListnerList;
class CWebServiceGateway
{
void createObject(std::string request); //Used to create employee
void deleteObject(std::string request); //delete employee
void getObjects(std::string request); //get employee(s) details
//...
};
struct CEmployee
{
std::string m_Name;
int m_ID;
};
class IEmployeeManagerListner
{
public:
virtual void CreateEmployeeEvent (CEmployee& employee) = 0;
virtual void ListEmployeesEvent (EmployeeList& employeeList) = 0;
};
class CEmployeeManager
{
public:
void CreateEmployee (CEmployee& employee);
void ListEmployees (EmployeeList& employeeList);
void AddListner(const IEmployeeManagerListner *const newListner)
{
empManListnerList.push_back(newListner);
}
private:
EmployeeManagerListnerList empManListnerList;
void CreateEmployeeEventNotify (CEmployee& employee) //Notify each listner of the event
{
EmployeeManagerListnerList::iterator iter;
for( iter = empManListnerList.begin(); iter != empManListnerList.end(); ++iter)
(*iter)->CreateEmployeeEvent(employee);
}
void ListEmployeesEventNotify (EmployeeList& employeeList);
};
class CUserInterface : public IEmployeeManagerListner
{
public:
void Initialize()
{
empManager.AddListner(dynamic_cast<IEmployeeManagerListner*>(this));
}
void GetEmployeeDetailEvent();
void UpdateUI();
private:
CEmployeeManager empManager;
virtual void CreateEmployeeEvent (CEmployee& employee) {}
virtual void ListEmployeesEvent (EmployeeList& employeeList) {}
};
I have used inheritance to implement the observer pattern. Inheritance immediately means - high coupling. Can the same be accomplished without using inheritance?