C/C++ 撸一段流行的观察者模式
来源:互联网 发布:c语言whilet--的用法 编辑:程序博客网 时间:2024/06/06 21:53
最近把智能指针这块东西捡起,随便就撸了个观察者,主要目的还是练习下几个智能指针,unique_ptr,shared_ptr,weak_ptr等。
//2017年11月6日 21:25:38#include <vecotr>#include <iostream>using namespace std;class Base{public: Base() noexcept{} virtual ~Base(){} virtual void Func() {}};class Derived:public Base{public: Derived() noexcept {} virtual void Func() { cout << "Derived1:Notify success" << endl; }};class Derived2 :public Base{public: Derived2() noexcept {} virtual void Func() { cout << "Derived2:Notify success" << endl; }};enum class MakeType:unsigned int{DERIVED1,DERIVED2};class Factory{public: auto MakeObject(MakeType type,void *lparam=nullptr,void *wParam=nullptr) { auto Del = [&](Base*pBase) {delete pBase; }; unique_ptr<Base,decltype(Del)> uPtr(nullptr,Del); switch (type) { case MakeType::DERIVED1: uPtr.reset(new Derived()); break; case MakeType::DERIVED2: uPtr.reset(new Derived2()); break; default: break; } return uPtr; } void NotifyAllFunc() { for (weak_ptr<Base> wPtr:m_vec) { shared_ptr<Base> sPtr= wPtr.lock(); if (!wPtr.expired() && sPtr) { sPtr.get()->Func(); } } } void AddFunc(shared_ptr<Base> pBase) { m_vec.push_back(pBase); } vector<weak_ptr<Base>> m_vec;};int main(){ Factory fac;//造一个工厂 shared_ptr<Base> pObj1 = fac.MakeObject(MakeType::DERIVED1);//造一个目标1 shared_ptr<Base> pObj2 = fac.MakeObject(MakeType::DERIVED2);//造一个目标2 fac.AddFunc(pObj1);//添加到观察者 fac.AddFunc(pObj2);//添加到观察者 fac.NotifyAllFunc();//调用所有的被观察对象 return 0;}
撸成功:
更多文章:http://blog.csdn.net/what951006?viewmode=list
powered by:小乌龟在大乌龟背上~
阅读全文
0 0
- C/C++ 撸一段流行的观察者模式
- C语言的观察者模式
- 【C++】Chapter10:观察者模式
- Objective C--观察者模式
- Objective C 观察者模式
- 观察者模式(C++)
- Objective C--观察者模式
- c版本观察者模式
- 【C++】观察者模式
- 观察者模式(C++)
- Object-c 观察者模式
- C++:观察者模式
- 观察者模式(C++)
- 【C#】观察者模式案例
- 一段美好的时光&观察者模式
- 一段经典的c
- 【C#】事件与观察者模式
- objective-c 键值观察者KVO模式的学习
- python面向对象
- C++猜数字游戏
- Bear and Blocks CF-574D(类似dp+思维)
- Topological Sorting
- js的类型检测
- C/C++ 撸一段流行的观察者模式
- FL2440
- 树上方法总结 LCA 树上倍增 树链剖分 树的直径 重心
- 表单验证
- nexus配置以及部署在tomcat中
- 各种语言注释标注总结
- nginx源码阅读(十).ngx_event_core_module模块
- C和C++的区别
- Spark基础