2015年3月

桥接模式(Bridge pattern),把抽象和抽象的实现进行解耦,这样它们就可以独立的变化。桥接模式使用了封装、聚合,可以使用继承将不同的功能分离到不同的类中。

桥接模式通常会和适配器(Adapter pattern)模式混淆。事实上,桥接模式通常使用适配器模式进行实现。

结构如下:
Bridge pattern structure

  • Abstraction(抽象类)

    定义了抽象接口,维护Implementor的引用
  • RefinedAbstraction(普通类)

    扩展了Abstraction定义的接口
  • implementor(接口)

    定义了实现类的接口
  • ConcreteImplementor(普通类)

    实现了Implementor接口
    

使用场景:抽象和实现经常发生变化。桥接模式也可以认为是一个两层抽象。

Spring那么流行,为啥呢?Spring的优点主要是啥呢?

在知乎中有这么一个回答,我觉得不错。知乎链接

最重要的优点主要是Ioc(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)了。

Spring Framework是一个很大的框架,包括很多部分,从官方文档(4.1.4)上来看,有如下几个部分:
spring结构


- 阅读剩余部分 -

在UI中,经常会出现多次事件的情况,最常见的比如鼠标双击和三击,触摸屏上的双敲等。一次动作,就发一下事件就好。那么两次甚至多次事件怎么处理才最好呢?

当触发多次事件时,单次事件以及两次事件是否还要继续发送?

要什么方式判断两次事件间隔足以算上一个多次事件而不是多个单次时间呢?

代码是最好的老师。在Apache Pivot中找到了一段处理该事件的代码,伪代码如下:

long lastTime = 0;
int count = 0;

int multiInterval = 500;

// 亮屏
screenOn(){
    process();
}

// 灭屏
screenOff(){
    process();
}

// 处理
process(){
    long currentTime = System.currentTimeMills();
    if(current - lastTime < multiInterval){
        count++;
    }else{
        lastTime = System.currentTimeMills();
        count = 1;
    }
    // 触发监听
    changeListeners.change(count);
}

从上述伪代码可以看出:

  • 每次事件都会发出,可能发出多个单次事件,也可能发出一个单次事件,一个两次事件……总之,每次UI操作均会发出事件
  • 判断两次事件是否算成一个组合事件,是通过判断事件触发间隔时间来做的