C++ 设计模式-访问者模式


C++访问者模式

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

开发动物园管理系统,最初的需求很简单:

class Animal {
   };
class Cat : public Animal {
   };
class Dog : public Animal {
   };

// 处理动物叫声
void makeSound(Animal* a) {
   
    if (auto c = dynamic_cast<Cat*>(a)) {
   
        std::cout << "Meow!\n";
    } else if (auto d = dynamic_cast<Dog*>(a)) {
   
        std::cout << "Woof!\n";
    }
}

当新增喂养功能时,代码迅速腐化:

void feedAnimal(Animal* a) {
   
    if (auto c = dynamic_cast<Cat*>(a)) {
   
        std::cout << "Give fish\n";
    } else if (auto d = dynamic_cast<Dog*>(a)) {
   
        std::cout << "Give bone\n";
    }
}

系统痛点

  • 每新增功能就要修改所有类型判断逻辑
  • 类型检查与业务逻辑高度耦合
  • 违反开放封闭原则(OCP)

二、模式实现:双分派的艺术

2.1 类图精髓

你可能感兴趣的:(#,北漂+滴滴出行,C++设计模式,VIP,激励,c++,设计模式,访问者模式)