Skip to content

vaibhavbvcoe/DesignPatterns-CPP

Repository files navigation

// kcheckPrac.cpp : Defines the entry point for the console application. //

#include "stdafx.h" #include using namespace std; //class singleton //{ // singleton() // { // } // singleton(singleton& ) // { // } // singleton & operator =(singleton&) // { // return this; // // } //public: // void check() // { // std::cout<<"check my name"<<endl; // } // static singleton singleton_obj; // static singleton * GetmySingleton() // { // if(singleton_obj==NULL) // singleton_obj= new singleton(); // return singleton_obj; // } //}; //singleton singleton::singleton_obj; // //class ICommand //{ //public: // virtual void Execute()=0; //}; //class Light //{ //public: // void ON() // { // std::cout<<"light on"<<endl; // } // void OFF() // { // std::cout<<"Light off"<<endl; // } //}; //class LightOnCommand:public ICommand //{ // Light m_lt; //public: // LightOnCommand(Light lt) // { // m_lt = lt; // } // void Execute() // { // m_lt->ON(); // } //}; // //class LightOffCommand:public ICommand //{ // Light m_lt; //public: // LightOffCommand(Light lt) // { // m_lt = lt; // } // void Execute() // { // m_lt->OFF(); // } //}; // //class Remote //{ // ICommandm_com; //public: // Remote(ICommand*com) // { // m_com= com; // } // void Pressbutton() // { // m_com->Execute(); // } // // //};

#include #include

template class Observer { public: virtual void Update(T data)=0; };

template class MyObserver : public Observer { public: explicit MyObserver(const std::string &str) : name(str) {} void Update(T msg) { cout<<name << " Got message " << msg << std::endl; } private: std::string name; };

template class Subject { vector<Observer*>ob; public: void Add(Observer*o) { ob.push_back(o); } void Remove(Observer*o) {

	for( int i=0; i< ob.size();i++)
	{
		if(ob[i]==o) 
		{
			ob.erase(ob.begin()+i)
				break;
		}
	}	
	
}
void Notify(T val)
{
	for(int i = 0 ; i < ob.size() ;i++)
	{
		ob[i]->Update(val);
	}
}

};

template class MySubject : public Subject { public: enum Message {ADD, REMOVE}; };

int _tmain(int argc, _TCHAR* argv[]) { MySubject <char*> x = new MySubject<char>();

MyObserver<char*> *obs1 = new MyObserver <char*>("observer1");
MyObserver<char*> *obs2 =  new MyObserver<char*>("observer2");
MyObserver<char*> *obs23 =  new MyObserver<char*>("observer23");

x->Add(obs1);
x->Add(obs2);
x->Add(obs23);
x->Notify("teddy");


/*singleton * obj = singleton::GetmySingleton();
std::cout<<obj<<endl;
singleton*obj1  =  singleton::GetmySingleton();*/
//std::cout<<obj1<<endl;

//ICommand com =new LightOnCommand(new Light()); //Remoterem = new Remote(com); //rem->Pressbutton(); //

return 0;

}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published