Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // main.cpp
- // observer
- //
- // Created by Andrei Gavrila on 28/11/2021.
- // Copyright © 2021 Andrei Gavrila. All rights reserved.
- //
- #include <iostream>
- #include <vector>
- #include <algorithm>
- class IToggleObserver
- {
- public:
- virtual void onToggle(std::string objectName) = 0;
- };
- class MyToggleObserver1: public IToggleObserver
- {
- public:
- virtual void onToggle(std::string objectName)
- {
- std::cout << "I am the " << static_cast<void*>(this) << " observer of type MyToggleObserver1 and I was told that a toggle was performed on " << objectName << ". I will do something about this!" << std::endl;
- }
- };
- class MyToggleObserver2: public IToggleObserver
- {
- public:
- virtual void onToggle(std::string objectName)
- {
- std::cout << "I am the " << static_cast<void*>(this) << " observer of type MyToggleObserver2 and I was told that a toggle was performed on " << objectName << ". I will simply ignore it as I don't want to do anything!" << std::endl;
- }
- };
- class ObservableSwitch
- {
- private:
- std::string objectName;
- std::vector<IToggleObserver *> toggleObservers;
- void notifyObservers()
- {
- std::for_each(toggleObservers.begin(), toggleObservers.end(), [&](IToggleObserver *observer) {
- observer->onToggle(objectName);
- });
- }
- public:
- ObservableSwitch(std::string objectName): objectName(objectName) {}
- void addObserver(IToggleObserver *observer)
- {
- toggleObservers.push_back(observer);
- }
- void toggle()
- {
- std::cout << "Switch toggled, do something and notifying observers!" << std::endl;
- notifyObservers();
- }
- };
- int main(int argc, const char * argv[])
- {
- ObservableSwitch observableSwitch("Bedroom Light Switch");
- IToggleObserver *to = new MyToggleObserver1();
- observableSwitch.addObserver(new MyToggleObserver1());
- observableSwitch.addObserver(new MyToggleObserver2());
- observableSwitch.addObserver(to);
- observableSwitch.addObserver(to);
- observableSwitch.toggle();
- return 0;
- }
- /*
- Output:
- Switch toggled, do something and notifying observers!
- I am the 0x10100d580 observer of type MyToggleObserver1 and I was told that a toggle was performed on Bedroom Light Switch. I will do something about this!
- I am the 0x101002e30 observer of type MyToggleObserver2 and I was told that a toggle was performed on Bedroom Light Switch. I will simply ignore it as I don't want to do anything!
- I am the 0x10100d160 observer of type MyToggleObserver1 and I was told that a toggle was performed on Bedroom Light Switch. I will do something about this!
- I am the 0x10100d160 observer of type MyToggleObserver1 and I was told that a toggle was performed on Bedroom Light Switch. I will do something about this!
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement