<hr> 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)
<hr> 二、模式实现:双分派的艺术
2.1 类图精髓
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |