请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

观察者要解决什么问题

这里感觉用不用观察者模式没啥区别啊。
老六既然能提供短信接口,也能提供邮件接口等。那就让老六只提供一个通知接口,然后小慕就调用这个接口不就行了吗?
void UserWallet::consume(float p)
{
balance -= p;
// 调用老六提供的通知接口,老六自己在接口里面用短信或者邮件即可。
}

比如下面代码,岂不是更干净吗?(让老六自己去在SendMessage函数中实现发邮件,打电话,发短信等)

#include <iostream>

class Notifier {
public:
  void SendMessage(double money_left) {
    std::cout << "send a message to a user:money_left=" << money_left << std::endl;
  }
};

class Wallet {
public:
  void consume(double money) {
    money_left_ -= money;
    notifier_.SendMessage(money_left_);
  }
private:
  Notifier notifier_;

private:
  double money_left_ = 100.0;
};

/*
程序运行结果:
send a message to a user:money_left=95
*/
int main() {
  Wallet wallet;
  wallet.consume(5);

  getchar();
  return 0;
}

(视频中代码只演示了使用观察者之后的代码,没有演示使用观察者之前的代码,没有理解二者区别在哪里)

观察者解决的本质问题是什么啊?

正在回答 回答被采纳积分+3

1回答

Redknot 2024-09-24 13:17:54

如果这时候除了信息提醒模块之外,还有别人要监控钱包呢?


观察者模式里面提供了一个观察者列表的虚类接口,就是为了能让钱包类在无感知的情况下,扩展功能。


你写的这个例子里面,当有别人也想监听的时候,就需要改动钱包类中的代码了。


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信