在一次面试过程,面试官问:对设计模式了解不,项目中用到了哪些设计模式。

发现:面试官考察面试者的知识体系,不单纯的停留在了解熟悉的层面,还考察在实际项目中的应用。


事后自己总结了一下:用到的设计模式主要有那么几个:单例设计模式,享元模式,代理模式,装饰者模式

下面将依次简单的说一下

1.单例设计模式

单例设计模式一般有几种实现形式,饿汉式,饱汉式,双重加锁式。

应用:数据库连接池。因为数据库连接池是一种数据库资源,使用数据库连接池的主要是为了节省打开或者关闭数据库连接所造成的效率损耗,这种效率上的损耗还是非常昂贵的,使用单例设计模式可以大大降低这种损耗。

多线程中线程池的设计一般也采用单例设计模式,这是由于线程池要方便对池中的线程进行控制。

网站中访问计数器,一般也是采用单例设计模式实现的,否则难以同步。

2.享元模式

由于做的是一个知识问答型的网站,发布一个问题之后,可以对其进行评论和转发。但实际在数据库中存储的该问题只有一个,有点类似于享元模式的思想。

应用:在一个系统中,如果有多个相同的对象,那么只共享一份就ok了。不必每个都去实例化一个对象,可以节省大量的内存空间。

在Java中,String类型的使用了享元模式,String对象是final类型的,对象一旦创建就不可以被改变。在Java中字符串常量都是存在常量池中的,Java会确保一个字符串常量在常量池中只有一个拷贝。

3.代理模式

应用:数据多机房同步,机房通过代理模式同步到其他机房,来避免机房宕机。

4.装饰者模式

动态地给一个对象添加一些额外的职责。

应用:Java IO的API是典型的应用。对扩展开放,对修改关闭。