职责链模式(Chain of Responsibility Pattern)

所有一切链式的、分步完成的、"传递性"的都可以想到用职责链模式。其实现方式的关键类似于链表的结构。职责链由一些职责结点组成,每个结点能够将任务传递给下一个结点。最后每个结点都遍历且执行了该结点规定执行的任务。举个例子:类图:关键是RequestHandler的实现。代码:/** * * RequestHandler * */ public abstract class RequestHa...
阅读(19) 评论(0)

模板方法模式(Template Method Pattern)

模板方法模式是定义一个算法的骨架,将算法的实现延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。在这个例子中,算法骨架是StealingMethod,然后定义了两个算法的具体实现类:SubtleMethod和HitAndRunMethod。算法调用者为Halfling Thief,调用者只关心StealingMethod,而具体的算法实现由具体的场景来具体指定。类...
阅读(33) 评论(0)

读者容错模式(Tolerant Reader Pattern)

读者容错模式是当从一个数据模型中读取数据的时候,无论这个数据模型如何变换,尽最大可能读取自己需要的数据,达到读取数据健壮性的要求。例如我们有一个数据模型类:RainbowFish,表示一种鱼。有一个读写数据的类:RainbowFishSerializer,来获取RainbowFish的name、age、lengthMeters、weightTons等数据。但是RainbowFish是第三方提供,可...
阅读(23) 评论(0)

Flux Pattern

Flux是Facebook提出的一种新的架构模式。一个Flux架构一般分为4个部分:View:视图层(界面)Action:视图层发出的消息或事件,如点击按钮Dispatcher:派发器,用来接受Actions、执行回调函数Store:数据层,用来存放应用状态,一旦发生变动,就要通知Views更新界面执行流程 用户操作(访问)ViewView发出用户的Action给DispatcherDispatc...
阅读(32) 评论(0)

转换器(Converter)模式

在日常编码中,我们会遇到这样一个场景:把一个类型的对象转换成另一个对象,而这两者之前的转换强调的是"值(Value)"的等价转换,两者之间并没有继承与被继承的关系,也并不是像浮点数转整数这种语法意义上的转换关系。如下面举的这个例子:"用户"这个对象定义了User和UserDto两种Bean class来表示,二者所代表的"值"都是一致的,只是一个是业务逻辑层面的,一个是数据访问层面的。二者之前常常...
阅读(63) 评论(0)

事件分发(EventDispatcher)模式

该模式实际上是监听模式的一种扩展。由事件(Event)驱动,每当有事件产生的时候,由事件分发器分发给特定的事件处理器处理该事件。类图:核心类:EventDispatcher——事件分发中心,每个来的事件都由该类分发到特定的处理者                Event——事件接口,不同的事件类型都要实现该接口                Handler——处理器接口,不同的处理器都要实现改接口...
阅读(94) 评论(0)

execute around 模式

在写代码的时候,常常会遇到这样的情况:每次在执行一段代码的时候,都需要先执行一些代码;执行完之后,再执行另一些代码。比如在读写文件的时候,我们真正care的逻辑是"读写",至于文件流的初始化、打开、关闭、异常处理等都不是我们关心的。但是,每次在"读写"之前,我们需要执行打开操作,"读写"之后,需要执行关闭操作。这个时候就可以使用"execute around 模式"来提炼出"读写"前后的公共代码,...
阅读(42) 评论(0)

Null Object 模式

有时候,我们可以定义一个"空对象"来代替null,这样可以更加优雅的处理对象为null的情况,避免空指针异常。例如定义二叉树结点的时候,可以用一个NullNode结点来定义空结点。那么一个叶子结点的左子树和右子树就都可以指向NullNode,从而避免了可能引起空指针异常的null。类图:代码:/** * * Interface for binary tree node. * */ pub...
阅读(61) 评论(0)

值对象(Value Object)模式

针对一些数据对象,我们更强调的是这个对象的值而不是这个对象本身的时候,就可以使用值对象模式。意思就是两个对象判定相等的时候应该是两个对象的"值"相等,而不是它俩必须是同一个对象。在编写值对象模式的时候,应该注意以下几点(以java为例):1、必须重写equals()、hashCode(),且重写的原则是两个对象的"值"相等的化,equal()和hashCode()必然相等。2、值对象一般不可修改,...
阅读(63) 评论(0)

对象池(Object Pool)模式

对象池模式适用于当对象的创建代价比较高又需要频繁创建的时候。对象池模式会创建一批对象缓存起来待用。当需要对象的时候就从缓存池中获取,不需要的时候就放回缓存池中。当缓存池中对象不够用的时候又会创建新的对象放到缓存池中。类图如下:代码如下:/** * * Oliphaunts are expensive to create * */ public class Oliphaunt { p...
阅读(66) 评论(0)

二分查找及其拓展

二分查找,也叫"折半查找",是一个很常见的算法。其原理思想或多或少都了解。我还记得上大学的时候讲数据结构的老师说过:使用二分查找的一个重要的先决条件是被查找的数组必须是有序的。这句话放到当时的语境来讲是正确的。但是,随着工作中逐渐遇到各种各样的查找算法,到头来发现都是二分查找的思想,有些数组不一定就有序,有些也有可能都不是单纯的数组。但是都可以从中提炼出二分查找的思想来。因此,我觉得有必要归纳总结...
阅读(82) 评论(0)

常见的代码托管平台

gitlab ( inner-source )https://gitlab.com/gitlab-org/gitlab-cehttp://gitlab.baidu.com/github ( open-source, social coding )https://github.com/Bitbuckethttps://bitbucket.org/phabricatorhttp://pha.zz.ba...
阅读(70) 评论(0)

Freeline - Android平台上的秒级编译方案

Freeline是什么? Freeline是蚂蚁聚宝团队15年10月在Android平台上的量身定做的一个基于动态替换的编译方案,5月阿里集团内部开源,稳定性方面:完善的基线对齐,进程级别异常隔离机制。性能方面:内部采用了类似Facebook的开源工具buck的多工程多任务并发思想:端口扫描,代码扫描,并发编译,并发dx,并发merge dex等策略,在多核机器上有明显加速效果,另外在class...
阅读(77) 评论(0)

Android SDK Version简介

我们在android工程中经常会遇见如下几个SDK Version——minSdkVersion、targetSdkVersion和maxSdkVersion。根据名字看是显而易见的含义,但是往往越显而易见,越不会被重视。知道个似是而非,大概意思就差不多。因此,我觉得有必要记下一笔,讲讲这几个属性在android里到底是什么意思。minSdkVersion指的是当前APP可以安装的系统最低版本。如...
阅读(342) 评论(0)

相似性度量

一、余弦相似度一个物品可以由一系列特征描述,这些特征构成了一个特征向量。余弦相似度就是通过两个特征向量的夹角来度量两个物品的相似程度。夹角范围是[0,π];当夹角∈[0,π/2),二者正相关,越小,正相关越厉害;当夹角=π/2,二者不相关;当夹角∈(π/2,π],二者负相关,且越大,负相关越厉害。计算公式:a = (x1,x2,…….xn),b=(y1,y2,……yn)一、皮尔逊积矩相关系数计算公...
阅读(240) 评论(0)
159条 共11页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:386897次
    • 积分:3702
    • 等级:
    • 排名:第9043名
    • 原创:80篇
    • 转载:71篇
    • 译文:6篇
    • 评论:82条
    最新评论