[设计模式]中介者模式之Events消息传递实现

2017-12-06
阅读 2 分钟
2.8k
例子中给出了ChatRoom作为第三方中介者, 而User作为真正的通信对象, 每个用户发送的消息实际上是在ChatRoom中进行了广播. 对于通信的接耦有两种方式:

单元测试如何保证了易用的API

2017-11-11
阅读 2 分钟
2.6k
备注:文章来源于我的这个答案:TDD的意义. 因为原题目被锁了,所以搬移出来.本文不强烈区分TDD和单元测试, 虽然前者是方法论, 后者是实践这一方法论的具体技术. 不过大多数场景都是用单元测试来践行TDD的.

【设计模式】组合模式之神经网络应用

2017-11-06
阅读 3 分钟
3k
试想,一个对象本身和由对象组成的一个集合都需要支持逻辑上相同的操作,实际实现可能不一样.既然在语义这个更高级抽象可以把两者统一,那么如果这两者都继承同一个基类岂不是更好? 一个可以类比的例子是,目录本身可能包含多个目录,在没有子目录的情况下,目录的遍历是遍历该目录下的文件,反之,则需要递归的遍历子...

【设计模式】空对象设计模式学习

2017-11-02
阅读 3 分钟
2.8k
之前看设计模式的书并没有看到过Null Object设计模式, 所谓空对象设计模式,实际上是为了规避客户端获取一个对象后(比如是指针对象),在后面调用的所有地方都要判空,否则调用方法(或者解引用)那可能就有问题了,轻则coredump重则程序没有挂但是运行是不对的. 下面针对一个比较简单的例子给出场景:

asio_example笔记之Allocation

2017-08-29
阅读 3 分钟
3.4k
用asio实现网络编程通常的套路是单线程异步,对特定socket发起异步的读取操作,读取ok之后马上再次发起对这个socket上的异步写入操作,反复执行; client通过传入异步函数回调函数来发起下一次的读/取操作, 而可调用对象(函数对象/lambda表达式)都可以等加成传入了一个类实例,asio负责对这个类实例存储和释放,默认的内...

使用boost::asio实现简易线程池

2017-08-15
阅读 3 分钟
13.1k
只要稍微了解 Asio 的人都知道,在一个 io_service 上开几个线程后, 接下来就只要简单的使用 io_service.post() 即可投递一个闭包给线程去执行的. 这是一个天然的线程池.还可以同 io 操作复用你的线程.停止发明垃圾的线程池实现吧.

c++字符串分割方法整理

2017-05-15
阅读 3 分钟
12k
c++的标准库string很多东西没有提供,包括但不限于split/join/slice, 而用到的机会又很多, 虽然利用标准库/第三方库实现split功能的方式有千千万, 本篇就按照how to split a string in c++中的几种方式给出一下,已经能覆盖到平时的使用场景了.

c++面向对象之operator new学习笔记

2017-02-18
阅读 3 分钟
2.1k
实际的代码中已经很少见到new的身影了,即使是比较老的c++编译器环境, 也提供了auto_ptr管理内存.但是c++毕竟贴近底层的几个例证就是对类的封装没有增加什么额外的负担,c++对象模型仍然是一一映射到连续的内存地址上去;对于内存的分配方式, 控制权仍然在程序员手里. 还是很有必要熟悉理解一番的.

面向对象class杂项笔记

2017-02-13
阅读 2 分钟
2.3k
众所周知,c++编程范式比较多, 实际工程中一般面向对象和泛型编程比较多, 有时候不同的项目组的喜好有差异导致代码的编程范式不同, 互相review的时候基本看不懂对方的代码(喜欢泛型的应该看面向对象的没啥压力, 但是没怎么用过泛型的看着一堆template就比较头疼); 看过的项目代码很少,不知道现在(现代)业界c++一般什...

c++面向对象笔记1:基于对象类的设计要点

2017-01-06
阅读 1 分钟
1.7k
一个典型的基于对象的类为complex, 类的实现不需要指针且只由c++的内置类型组成,对于这种类的设计要点注意事项就拿complex的实现作为例子, 部分代码如下:

[OJ]_LightHouse实现

2015-04-05
阅读 3 分钟
2.6k
思路: 1. 对n点循环遍历,对两点做差值,满足y x方向同时大于或小于,那么累计+1->题目中给定数量级10^6, 时间复杂度太大,O(n!),不可用 2. 先对x方向进行排序,再统计y方向的相对顺序,如果y方向的也是顺序的,那么这两点必然满足条件+1 3. 需进行两次排序,采用归并排序将时间复杂度降为nlogn, 第一次对x方向上归并排序,第...