青山相待

            白云相爱

            梦不到紫罗袍共黄金带

            一茅斋

            野花开

            管甚谁家兴废谁成败

            陋巷单瓢亦乐哉

            贫,气不改!

            达,志不改!

随笔分类 -  设计模式

摘要:template <typename T> struct singleton_default { private: struct object_creator { object_creator() { singleton_default<T>::instance(); } inline void d 阅读全文
posted @ 2016-07-27 17:34 Leo.Z 阅读(1217) 评论(0) 推荐(1)
摘要:概要 redis的每个server实例都维护着一个保存服务器状态的redisServer结构 struct redisServer { /* Pubsub */ // 字典,键为频道,值为链表 // 链表中保存了所有订阅某个频道的客户端 // 新客户端总是被添加到链表的表尾 dict *pubsub 阅读全文
posted @ 2016-07-03 11:22 Leo.Z 阅读(440) 评论(0) 推荐(0)
摘要:前言 C10K problem提出了一个问题,如果1w个客户端连接到server上,间歇性的发送消息,有哪些好的方案? 其中的一种方案是,每个线程处理多个客户端,使用异步I/O和就绪通知机制,redis无疑是一个很好的榜样 redis的特点和C10K proble的契合点 内存数据库; 单线程支持上 阅读全文
posted @ 2016-07-03 01:37 Leo.Z 阅读(1060) 评论(0) 推荐(0)
摘要:reactor介绍 reactor的工作模式就像它的名字一样,是一种反射模式,当事件发生时,根据发生的事件调用注册的处理器。 Reactor的优点和应用 Reactor最常用于非阻塞的socket 传统的设计是一种同步的停等协议,读写操作执行后要等待当前fd的下一次可读/写事件,这期间什么都不能干, 阅读全文
posted @ 2016-07-03 00:05 Leo.Z 阅读(1972) 评论(0) 推荐(0)
摘要:libev是一个开源库,实现了一个reactor模式事件驱动任务调度库。代码非常精简,包含所有实现的.c文件只有不到5000行。 支持的事件类型: ev_io ev_timer ev_periodic ev_signal ev_child ev_stat ev_idle ev_prepare and 阅读全文
posted @ 2016-07-03 00:04 Leo.Z 阅读(466) 评论(0) 推荐(0)
摘要:Boost::Asio为同步和异步操作提供了并行支持,异步支持基于前摄器模式,这种模式的优点和缺点可能比只同步或反应器方法要低。让我们检查一下Boost::Asio是如何实现前摄器模式的,没有引用基于平台的细节。前摄器设计模式,改编自POSA2--异步操作 定义一个异步执行的操作,比如socket的 阅读全文
posted @ 2016-03-12 12:38 Leo.Z 阅读(1029) 评论(0) 推荐(1)
摘要:Boost::Asio可以在socket等I/O对象上执行同步或异步操作,使用Boost::Asio前很有必要了解Boost::Asio、你的程序以及它们交互的过程。作为一个引导的例子,我们思考一个当一个socket执行连接操作时发生了什么,我们首先开始一个同步的例子你的程序需要一个io_servi 阅读全文
posted @ 2016-03-11 23:19 Leo.Z 阅读(1200) 评论(0) 推荐(2)
摘要:ACE大量运用包装器模式,以期改变面向过程的系统API可视性以及错误处理较难的情况包装器在若干场合能极大简化代码量,甚至是编码过程比如ACE_Thread_Mutex对象创建会自动初始化,很开心吧ACE_Guard定界加锁,我习惯称为自动锁,配合无间的好伙伴而ACE_SOCK_Stream和ACE... 阅读全文
posted @ 2015-04-24 16:19 Leo.Z 阅读(158) 评论(0) 推荐(0)
摘要:简介 将一个复杂对象的构建和他的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式英文:Builder 详述 建造者模式的优点是:用户只需要指定要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。 建造者模式结构图,最近越来越喜欢画UML类图了,清晰明了。 什么时候使用建... 阅读全文
posted @ 2014-07-08 22:34 Leo.Z 阅读(230) 评论(0) 推荐(0)
摘要:简介 外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使这一子系统更容易使用。 详述 外观模式英文:Facade 外观模式结构图 Facade:外观类,包含所有子系统的实例,并提供更抽象的MethodA和MethodB,MethodA和MethodB内部组合了子... 阅读全文
posted @ 2014-07-07 22:34 Leo.Z 阅读(176) 评论(0) 推荐(0)
摘要:简介 为其他对象提供一种代理以控制对这个对象的访问。 详述 代理模式英文:proxy。 代理模式结构图 subject:提供公用接口,这样在任何想使用realsubject的时候都可以用proxy替代。 realsubject:定义proxy所代表的真实实体。 proxy:保存一个引用使得pro... 阅读全文
posted @ 2014-07-06 17:58 Leo.Z 阅读(306) 评论(0) 推荐(0)
摘要:简介 将核心功能和装饰功能分离,为已有功能动态新增功能。 详述 装饰者模式英文翻译:Decorator。 装饰者模式类图 component:抽象接口类。 concretecomponent:具体的component类,实现核心功能,也是待添加功能的对象。 decorator:装饰者抽象类,继承... 阅读全文
posted @ 2014-07-06 17:28 Leo.Z 阅读(226) 评论(0) 推荐(0)
摘要:前言 从方向上改变糟糕的代码设计,如果你还是很直白的过程式思维,还在被一大堆的if else,随处可见的for、while所困扰,是时候学习设计模式了。 正文 软件设计中的合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。 合成和聚合都表示关联的特殊种类。聚合表示一种弱的”拥有“关系,体... 阅读全文
posted @ 2014-07-04 18:32 Leo.Z 阅读(217) 评论(0) 推荐(0)
摘要:前言 前两天学习了weak_ptr以后还是不甚明了,一则需要实际应用去锤炼,二来就是不懂观察者模式。 正文 观察者模式又叫发布-订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象,这个主题对象在状态发生改变时,会通知所有的观察者对象,使他们能够自动更新自己。通过一张visi... 阅读全文
posted @ 2014-07-04 16:44 Leo.Z 阅读(274) 评论(0) 推荐(0)
摘要:但凡成为大家公认的模式,都是有一些不可小觑的威力,今天分享一个简单的设计模式:单例模式。 单例模式用于一些只希望有一个实例的类或者只希望执行一次的操作:校长只能有一个、老板只能有一个、用户点击弹窗只希望弹出一次。用全局变量等方式也可以实现,但是多了很多判断和处理代码,并且职责模糊,类的唯一实例化是... 阅读全文
posted @ 2014-05-07 15:36 Leo.Z 阅读(516) 评论(0) 推荐(0)
摘要:看大话设计模式中大牛对小菜的精辟点评,也写了一个计算器程序,并跟着点评一路改良,还是不过瘾,应用了类模板和异常捕捉机制重写了程序。 本文不能算干货,恰当的比方是饭前甜点,吃一口有点味、有点意思,总归太小不管饱。 #include #include #include #include #includ... 阅读全文
posted @ 2014-05-07 14:18 Leo.Z 阅读(438) 评论(0) 推荐(0)