fork download
  1. #include<iostream>
  2. #include<vector>
  3. #include<string>
  4. #include <algorithm>
  5.  
  6. class ISubscriber {
  7. public:
  8. virtual void update() = 0;
  9. };
  10.  
  11. class Publisher {
  12. std::vector<ISubscriber*> m_subscriberList;
  13. public:
  14. virtual void registerSubscriber(ISubscriber& subscriber) {
  15. m_subscriberList.push_back(&subscriber);
  16. }
  17.  
  18. virtual void unregisterSubscriber(ISubscriber& subscriber) {
  19. m_subscriberList.erase(std::remove(begin(m_subscriberList), end(m_subscriberList), &subscriber), end(m_subscriberList));
  20. }
  21.  
  22. virtual void notifySubscribers() {
  23. for (auto subscriber : m_subscriberList) {
  24. subscriber->update();
  25. }
  26. }
  27. };
  28.  
  29. class UpdateManager : public Publisher {
  30. int m_baudRate;
  31. int m_aspectRatio;
  32. int m_volumeLevel;
  33. public:
  34.  
  35. UpdateManager() : m_baudRate(0), m_aspectRatio(0), m_volumeLevel(0) {}
  36.  
  37. virtual void setBaudRate(int newBaudRate) {
  38. m_baudRate = newBaudRate;
  39. notifySubscribers();
  40. }
  41.  
  42. virtual void setAspectRatio(int newAspectRatio) {
  43. m_aspectRatio = newAspectRatio;
  44. notifySubscribers();
  45. }
  46.  
  47. virtual void setVolumeLevel(int newVolume) {
  48. m_volumeLevel = newVolume;
  49. notifySubscribers();
  50. }
  51.  
  52. int getBaudRate() const { return m_baudRate; }
  53. int getAspectRatio() const { return m_aspectRatio; }
  54. int getVolumeLevel() const { return m_volumeLevel; }
  55. };
  56.  
  57. class UpdateReceiver : public ISubscriber {
  58. UpdateManager& m_manager;
  59. public:
  60. UpdateReceiver(UpdateManager& manager) : m_manager(manager) {
  61. m_manager.registerSubscriber(*this);
  62. }
  63. virtual void update() {
  64. // Process the new values
  65. std::cout << m_manager.getBaudRate() << std::endl;
  66. std::cout << m_manager.getAspectRatio() << std::endl;
  67. std::cout << m_manager.getVolumeLevel() << std::endl;
  68. }
  69. };
  70.  
  71. int main() {
  72.  
  73. UpdateManager manager;
  74. UpdateReceiver receiver(manager);
  75. manager.setBaudRate(5);
  76. return 0;
  77. }
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
5
0
0