helloworld:design_pattern:observer
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
helloworld:design_pattern:observer [2022/10/07 09:50] – Fusion avec le code Java root | helloworld:design_pattern:observer [2022/10/07 09:58] (Version actuelle) – Ajout d'un exemple en C++ root | ||
---|---|---|---|
Ligne 67: | Ligne 67: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | ====C++==== | ||
+ | |||
+ | ===Liste avec shared_ptr=== | ||
+ | |||
+ | <code cpp> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | class Observer { | ||
+ | | ||
+ | ~Observer() { std::cout << " | ||
+ | void call() { std::cout << " | ||
+ | }; | ||
+ | |||
+ | class Observable { | ||
+ | | ||
+ | std:: | ||
+ | void call() { | ||
+ | listener.erase(std:: | ||
+ | [](std:: | ||
+ | auto ob = obs.lock(); | ||
+ | if (ob) { | ||
+ | ob-> | ||
+ | return false; | ||
+ | } else { | ||
+ | std::cout << " | ||
+ | return true; | ||
+ | } | ||
+ | }), | ||
+ | | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | int main() { | ||
+ | auto observer = std:: | ||
+ | Observable observable; | ||
+ | observable.listener.push_back(observer); | ||
+ | observable.call(); | ||
+ | observer = nullptr; | ||
+ | observable.call(); | ||
+ | std::cout << " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Résultat: | ||
+ | |||
+ | < | ||
+ | Call | ||
+ | ~Observer | ||
+ | Fails | ||
+ | END | ||
+ | </ | ||
helloworld/design_pattern/observer.1665129050.txt.gz · Dernière modification : de root