Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <vector>
- using namespace std;
- class Observable{
- public:
- int info;
- vector<class Observer*> myObservers;
- public:
- virtual void attach(Observer* newObs) = 0;
- virtual void detach(Observer* someObs) = 0;
- virtual void notify() = 0;
- virtual int getInfo() = 0;
- virtual void setInfo(int x) = 0;
- };
- class Observer{
- public:
- Observable* myObs;
- virtual void update() = 0;
- virtual void printMe() = 0;
- };
- class concreteObservable: public Observable{
- public:
- concreteObservable(){
- info = 0;
- myObservers.clear();
- }
- void setInfo(int x){
- info = x;
- notify();
- }
- int getInfo(){
- return info;
- }
- void attach(Observer* newObs){
- this->myObservers.push_back(newObs);
- }
- void detach(Observer* someObs){
- vector<Observer*> ::iterator i;
- for (i = myObservers.begin(); i != myObservers.end(); i++){
- if (*i == someObs)
- myObservers.erase(i);
- }
- }
- void notify(){
- vector<Observer*> ::iterator i;
- for (i = myObservers.begin(); i != myObservers.end(); i++)
- (*i)->update();
- }
- };
- class ObserverA : public Observer{
- int obsInfo;
- void update(){
- obsInfo = myObs->getInfo();
- }
- public:
- ObserverA(Observable* someObs){
- myObs = someObs;
- }
- void printMe(){
- printf("%d is my value as ObsA\n", obsInfo);
- }
- };
- class ObserverB : public Observer{
- int obsInfo;
- void update(){
- obsInfo = myObs->getInfo()+1;
- }
- public:
- ObserverB(Observable* someObs){
- myObs = someObs;
- }
- void printMe(){
- printf("%d is my value as ObsB\n", obsInfo);
- }
- };
- void main(){
- concreteObservable* Integer = new concreteObservable();
- ObserverA A(Integer);
- ObserverB B(Integer);
- Integer->attach(&A);
- Integer->attach(&B);
- printf("\nIntializam cu 5\n");
- Integer->setInfo(5);
- A.printMe();
- B.printMe();
- printf("\n\nInitializam cu 10\n");
- Integer->setInfo(10);
- A.printMe();
- B.printMe();
- int n; cin >> n;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement