【每天一个java设计模式(十一)】 - 享元模式

享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。

享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。在有大量对象时,有可能会造成内存溢出,我们把其*同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。

享元模式的实现:

1. 创建手机类

//手机类
public class Phone {
    private String brand;       //品牌
    private int cost;           //价格

    public Phone(String brand){
        this.brand = brand;
    }

    public void setCost(int cost) {
        this.cost = cost;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "brand='" + brand + '\'' +
                ", cost=" + cost +
                '}';
    }
}

2. 创建手机工厂类

public class PhoneFactory {
    private static final HashMap<String,Phone> pool = new HashMap<>();

    public static Phone getPhone(String brand){
        Phone phone = pool.get(brand);

        if(phone == null){
            phone = new Phone(brand);
            pool.put(brand,phone);
            System.out.println("创建了一个" + brand + "手机");
        }

        return phone;

    }
}

3. 使用享元模式

public class FlyWeightMain {
    public static void main(String[] args) {
        String[] brands = {"华为","vivo","oppo","小米","华为","vivo","oppo","小米","华为"};
        for(int i=0;i<brands.length;i++){
            Phone phone = PhoneFactory.getPhone(brands[i]);
            phone.setCost((int) (Math.random() * 5000));
            System.out.println(phone.toString());
        }

    }
}

【每天一个java设计模式(十一)】 - 享元模式
可以看到我们好像创建和很多手机实例,但是只真正创建了4个对象,其他的都是对对象的重复使用。

下一节:
组合模式:【每天一个java设计模式(十二)】 - 组合模式

上一篇:云计算情报局预告|告别 Kafka Streams,让轻量级流处理更加简单


下一篇:零基础学习贴:如何收取短信回复消息