C++ 筹划模式-访问者模式

打印 上一主题 下一主题

主题 900|帖子 900|积分 2700

<hr> C++访问者模式

一、模式痛点:当if-else成为维护噩梦

开辟动物园管理体系,最初的需求很简朴:
  1. class Animal {
  2.    };
  3. class Cat : public Animal {
  4.    };
  5. class Dog : public Animal {
  6.    };
  7. // 处理动物叫声
  8. void makeSound(Animal* a) {
  9.    
  10.     if (auto c = dynamic_cast<Cat*>(a)) {
  11.    
  12.         std::cout << "Meow!\n";
  13.     } else if (auto d = dynamic_cast<Dog*>(a)) {
  14.    
  15.         std::cout << "Woof!\n";
  16.     }
  17. }
复制代码
当新增喂养功能时,代码敏捷腐化:
  1. void feedAnimal(Animal* a) {
  2.    
  3.     if (auto c = dynamic_cast<Cat*>(a)) {
  4.    
  5.         std::cout << "Give fish\n";
  6.     } else if (auto d = dynamic_cast<Dog*>(a)) {
  7.    
  8.         std::cout << "Give bone\n";
  9.     }
  10. }
复制代码
体系痛点


  • 每新增功能就要修改所有范例判断逻辑
  • 范例查抄与业务逻辑高度耦合
  • 违背开放封闭原则(OCP)
<hr> 二、模式实现:双分派的艺术

2.1 类图精髓


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

商道如狼道

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表