1. 享元模式概述
享元模式主要用于减少创建对象的数量。
享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。
(1) 适用情况
享元模式经常与工厂模式一起使用,从而减少相同对象的重复创建。
(2) 优点
减少对象的创建,降低系统的内存。
(3) 缺点
提高了系统的复杂度。
2. 享元模式实例
在工厂模式的汽车工厂中,每次调用接口都会创建新的对象。
而在享元模式中,先判断是否有可用对象,如果有则直接返回,否则才进行创建,这样就可以减少创建对象的数量。
由于代码比较简单,就不全部列出了。
public class CarFactory {
private Map<CAR_BRAND, Car> map = new HashMap<>();
/**
* 生产汽车
*
* @param brand 汽车品牌
* @return 汽车
*/
public Car buildCar(CAR_BRAND brand) {
Car car = map.get(brand);
if (car == null) {
switch (brand) {
case BENZ:
Benz benz = new Benz();
map.put(brand, benz);
return benz;
case BMW:
BMW bmw = new BMW();
map.put(brand, bmw);
return bmw;
case AUDI:
Audi audi = new Audi();
map.put(brand, audi);
return audi;
}
}
return car;
}
}
enum CAR_BRAND {
BENZ,
BMW,
AUDI
}
3. 一些思考
享元模式和单例模式可以认为是同一种思想,都是为了减少对象的创建,我个人认为,享元模式就是另一种形式的单例模式。最主要的应用在数据库连接池或者缓冲池的场景中。