设计模式
文章平均质量分 81
我把葡萄酿成酒
吾日三省吾身
展开
-
生产者消费者问题
1. 问题定义某些进程生产数据,另一些进程消费数据,他们之间通过一个大小为N的先入先出队列来进行数据的传递。当队列是满的时候,生产者阻塞,当队列是空的时候,消费者阻塞。这种场景还是挺常见的,比如媒体流的处理。2. PV原语PV原语,这个概念的提出者是河南(荷兰)科学家Dijkstra,这位爷也提出了图的Dijkstra最短路径算法。原语的意思是atomi原创 2015-03-29 10:17:59 · 859 阅读 · 0 评论 -
观察者模式
A是观察者,B是执行者,A不停的去观察是否有事情要做,有了就通知B去做事情,这就是观察者模式。这样的好处是显而易见的:一个观察者可以服务一万个执行者,降低了系统的开销。这里有个典型的例子:Android手机的耳机插入检测程序。耳机插入检测是内核通过Uevent上报给用户空间的,具体采用Socket通信的方式。但是Uevent是通用的,所以很多执行者去注册自己的处理函数到Uevent的观原创 2015-07-18 11:58:03 · 474 阅读 · 0 评论 -
工厂模式
1 什么是工厂模式?以下摘自维基百科工厂方法模式(英语:Factorymethod pattern)是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。”创建一个对象常常需要复杂的过程原创 2015-04-03 21:04:20 · 856 阅读 · 0 评论 -
代理模式
A是B的代理,对B的访问都可以通过对A的访问来实现。为什么要这样?因为对B的访问可能需要跨进程,可能需要复杂的逻辑判断,可能需要。。。总之比较麻烦,所以B为了提供给别人一个好用的接口,就创建了自己的代理A。在大名鼎鼎的Binder通信里,就是用Bp来做Bn的代理,Bp可以放在访问者进程里,从而封装了麻烦的跨进程调用。还有一个例子是AudioTrack和AudioFlinge原创 2015-07-18 12:33:23 · 563 阅读 · 0 评论 -
Why singleton is bad?
Paraphrased from Brian Button:They are generally used as a global instance, why is that so bad? Because you hide the dependencies of your application in your code, instead of exposing them thr转载 2016-06-28 20:55:51 · 311 阅读 · 0 评论 -
生产者,消费者的几个例子
在多线程中传递数据,免不了要用生产者,消费者模式,几个例子:Java:public class BlockingQueueInputStream extends InputStream {private static final String TAG = "BlockingQueueIS";private BlockingQueue mData = null;private byt原创 2016-08-12 13:20:43 · 998 阅读 · 0 评论