享元模式可以理解成一组共享的对象集合,下面就是一个简单的享元设计模式(甚至可以说是工厂模式了,呵呵,工厂模式目的是将具体创建对象的过程由工厂方法提供,用户只需要知道抽象类型即可。但这个例子就不要纠结成工厂模式了)
private Map
public Object get(String key) {
if(map.containsKey(key)) {
return map.get(key);
}
Object obj = new Object();
map.put(key, obj);
return obj;
}
单例模式见下
public class S {
private static S s = new S();
private S() {
}
public static S getInstance() {
return s;
}
}
从上面我们享元设计模式是一个类有很多对象,而单例是一个类仅一个对象;享元模式是为了节约内存空间,提升程序性能(避免大量的new操作);而单例模式则主要是出于共享状态的目的
既然你能在这提问, 我想两个设计模式的定义我就不用多说了, 我说说意义:
享元是对象级别的, 也就是说在多个使用到这个对象的地方都只需要使用这一个对象即可满足要求,
而单例是类级别的, 就是说这个类必须只能实例化出来一个对象,
可以这么说, 单例是享元的一种特例,
设计模式不用拘泥于具体代码, 代码实现可能有n多种方式, 而单例可以看做是享元的实现方式中的一种, 但是他比享元更加严格的控制了对象的唯一性
单例模式:主要是在全局范围内提供唯一的对象访问接口(框架里面使用的特别多)
享元模式:对于全局的对象创建,通过对象共享池的方式减少对象的创建,而意图并不是提供唯一的对象访问
总之:两种模式的出发点不一样