您的位置:首页 > 编程语言 > Java开发

java设计模式总结十:享元模式

2017-11-02 16:53 507 查看

享元模式定义

享元模式(Flyweight Pattern),又称轻量级模式(这也是其英文名为FlyWeight的原因),通过共享技术有效地实现了大量细粒度对象的复用。

享元模式简单的说就是共享,举个例子,有十个人需要用笔,这十个人不是同时需要使用,这时候我们没有必要拿出十只笔,可以从1开始依次拿给他们,当不够的时候再拿,这里用到的就是享元模式的概念:共享

现在,面向对象技术虽然可以很好的解决一些灵活性问题,但是有时候,我们需要使用很多的对象来解决一些大的问题,如果每次用对象都是使用new来创建一个新的对象,那随着规模的增大,当对象数量太多时,会导致对象创建及垃圾回收的代价过高,造成性能下降等问题。享元模式通过共享相同或者相似的细粒度对象解决了这一类问题。

享元模式使用场景

进行过数据库开发的应该都听过数据库连接池这个概念,在数据库连接池中,维护着一些数据库连接对象Connection,它就运用了享元模式这一设计模式,当我们操作数据库时,不需要去创建数据库连接对象,直接从该连接池中取出空闲的连接对象就行,从而减少了连接对象的创建,减少了系统的开销

在java中,也有很多地方使用了享元模式,比如java的基本类型变量和String类型变量就使用的享元模式设计的,看如下代码:

int a = 1;
int b = 1;
String str1 = "hello";
String str2 = "hello";
System.out.println(a==b);
System.out.println(str1==str2);


我们看到输出的结果都是true,他们就是采用的共享模式

享元模式组成

FlyWeight享元接口:定义共享接口

public interface FlyWeight{
void operation();
}


ConcreteFlyWeight具体享元类:该类的对象将被复用

public class ConcreteFlyWeight implements FlyWeight{
public ConcreteFlyWeight(){
}
public void operation(){
}
}


FlyWeightFactory享元工厂类:它是享元模式中最关键的部分,它将维护以创建的享元实例,并对以创建的享元实例进行标记。如果要使用的对象未被创建,则进行创建并对该实例进行标记,否则工厂直接返回对应的实例,从而实现对象复用与共享

public class FlyWeightFactory{
private FlyWeight flyWeight;
public FlyWeight factory(){
}
}


参考文献

深入浅出设计模式

jason blog
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: