申艳超-博客

搜索引擎、分布式、高性能、NLP、ElasticSearch、Solr

0%

定义:解释器模式是一种按照规定语法进行解析的方案,在现在项目中使用较少。正式定义:给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语句中的句子。

解释器模式有以下几个角色:

  • AbstractExpression抽象解释器
    具体的解释任务由各个实现类完成。
  • TerminalExpression终结符表达式
    实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结符表达式,但有多个实例,对应不同的终结符。
  • NonterminalExpression非终结符表达式
    文法中的每条规则对应于一个非终结表达式。非终结符表达式根据逻辑的复杂程度而增加,原则上每个文法规则都对应一个非终结符表达式。
  • Context环境角色

定义:组合模式(Composite Pattern)也叫合成模式,有时又叫做部分-整体模式(Part-Whole),主要是用来描述部分与整体的关系。确切的定义:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

组合模式类图如下:

组合模式

组合模式有以下几个角色:

  • Component抽象构件角色

    ​ 定义参加组合对象的共有方法和树形,可以定义一些默认的行为或属性。

  • Leaf叶子构件

    ​ 叶子对象,下面没有其他分支,也就是最小的遍历单位。

  • Composite树枝构件

    ​ 树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构。

这个说白了就是一个树形结构,不再具体使用例子了。

定义:享元模式(Flyweight Pattern)是池技术的重要实现方式。使用共享对象可有效地支持大量的细粒度的对象。

享元模式提出了2个要求:细粒度的对象和共享对象。
要求细粒度对象,那么不可避免地使用对象数量多且性质相近。可以将这些对象分为2个部分:

  • 内部状态(intrinsic)
    内部状态是对象可共享出来的信息,存储在享元对象内部并且不会随环境改变而改变。它们可以作为一个对象的动态附加信息,不必直接储存在具体的某个对象中,属于可以共享的部分。
  • 外部状态(extrinsic)
    外部状态是对象得以依赖的一个标记,是随环境改变而改变的,不可以共享的状态。
Read more »

定义:Bridge 模式又叫做桥接模式,是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。

为什么要使用桥接模式?

场景:我们想绘制矩形、圆形、椭圆形、正方形,我们至少需要4个形状类。但是如果又需要绘制的图形是不同颜色的,比如白色、灰色、蓝色的。
我们可能很快就会想到这样的方案:

桥接模式

按照上面的说法,我们可能要新建4*3=12个类来完成。
但是如果需要画更多的图形,并有更多的颜色呢。如此扩展下去很可能出现类爆炸。

Read more »

概要

单例模式是最简单的设计模式之一,但是对于Java的开发者来说,它却有很多缺陷。在本月的专栏中,David Geary探讨了单例模式以及在面对多线程(multithreading)、类装载器(classloaders)和序列化(serialization)时如何处理这些缺陷。

单例模式适合于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统,它们都是原型的例子。典型的情况是,那些对象的类型被遍及一个软件系统的不同对象访问,因此需要一个全局的访问指针,这便是众所周知的单例模式的应用。当然这只有在你确信你不再需要任何多于一个的实例的情况下。

Read more »

WebDriver与之前Selenium的JS注入实现不同,直接利用了浏览器native support来操作浏览器。所以对于不同平台,不同的浏览器,必须依赖一个特定的浏览器的native component来实现把WebDriver API的调用转化为浏览器的native invoke。

Selenium采用Javascript的合成事件来处理操作,比如要点击某个元素,JS会定位到这个元素然后触发onclick事件。而WebDriver使用的是系统的原生支持,首先是找到这个元素,然后找到它的location,并在这个座标点触发一个左键点击操作。因此,可以看出WebDriver能更好的模拟真实的环境。也正因为这个区别,有些hidden的元素是可以使用Selenium操作的,但是WebDriver缺不行,会报一个cannot clickable类似的错误。

Read more »

1.认识装饰器模式

装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰器模式的本质就是动态组合。动态是手段,组合才是目的。总之,装饰模式是通过把复杂的功能简单化,分散化,然后再运行期间,根据需要来动态组合的这样一个模式。

Read more »

类适配器:客户的开发人员定义了一个接口,期望用这个接口来完成整数的求和操作,接口定义如下:
Java代码

1
2
3
public interface Operation{  
public int add(int a,int b);
}

开发人员在了解这个接口的定义后,发现一个第三方类,里面有一个方法能实现他们期望的功能,其代码如下:

1
2
3
4
5
public class OtherOperation{  
public int otherAdd(int a,int b){
return a + b;
}
}
Read more »