设计模式——享元模式

458 阅读1分钟

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. 一些思考

享元模式和单例模式可以认为是同一种思想,都是为了减少对象的创建,我个人认为,享元模式就是另一种形式的单例模式。最主要的应用在数据库连接池或者缓冲池的场景中。

参考引用

享元模式:www.runoob.com/design-patt…