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
