怎么使用Java享元设计模式优化对象创建提高性能和效率

发布时间:2023-05-06 09:58:07 作者:iii
来源:亿速云 阅读:267

这篇“怎么使用Java享元设计模式优化对象创建提高性能和效率”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用Java享元设计模式优化对象创建提高性能和效率”文章吧。

介绍

Java中的享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享尽可能多的对象来减少内存占用和提高性能.

Java享元模式通常包含以下4种角色

注意:抽象享元和非共享状态角色是可选的,可以省略它们将其功能合并到其他角色中

当客户端请求创建或访问一个享元对象时,享元工厂会检查是否已经创建了该对象.如果已经创建,则返回现有对象的引用;如果尚未创建,则创建新的对象并返回其引用.这样客户端可以共享现有对象,而不必创建新的对象,从而减少内存占用和提高性能.

实现

以电商中的商品信息为例,在电商中,每个商品都有一个名称,价格,库存等属性.通常情况下,每个商品都需要单独创建一个对象,这样会导致内存占用增加,而且如果多次购买相同的商品,系统会创建多个相同的对象,浪费资源.

抽象享元

public interface Product {
    String getName();
    double getPrice();
    int getStock();
}

具体享元

public class ConcreteProduct implements Product{
    private String name;
    private double price;
    private int stock;
    public ConcreteProduct(String name, double price, int stock) {
        this.name = name;
        this.price = price;
        this.stock = stock;
    }
    @Override
    public String getName() {
        return name;
    }
    @Override
    public double getPrice() {
        return price;
    }
    @Override
    public int getStock() {
        return stock;
    }
}

享元工厂

public class ProductFactory {
    private static Map<String, Product> productMap = new HashMap<>();
    public static Product getProduct(String name, double price, int stock) {
        String key = name + "_" + price;
        Product res = productMap.get(key);
        if (Objects.isNull(res)) {
            // 如果缓存池内不存在,就创建新对象放置到缓存池
            res = new ConcreteProduct(name, price, stock);
            productMap.put(key, res);
        }
        return res;
    }
}

测试

public class Demo {
    public static void main(String[] args) {
        Product p1 = ProductFactory.getProduct("iPhone 14 Plus", 8899, 1);
        Product p2 = ProductFactory.getProduct("iPhone 14 Plus", 8899, 1);
        System.out.println(p1 == p2);
    }
}

怎么使用Java享元设计模式优化对象创建提高性能和效率

在上面示例代码中,首先创建一个商品接口Product,其中包含了商品的名称,价格,库存等属性.然后创建具体的商品类ConcreteProduct,实现Product接口,并定义共享的内部状态name,price,和stock.接下来我们创建商品工厂ProductFactory,用于创建和管理共享的商品对象,在这个工厂中,我们使用HashMap来储存共享的商品对象,每当客户端需要购买一个商品时,我们先检查是否已经创建了该商品对象,如果已经创建,则返回现有对象的引用,如果未创建,则创建新的对象储存到HashMap并返回其引用.

总结

优点

缺点

应用场景

以上就是关于“怎么使用Java享元设计模式优化对象创建提高性能和效率”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

推荐阅读:
  1. JAVA如何定义构造函数过程解析
  2. JAVA面向对象 封装原理及实例解析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:Java怎么实现自定义语言和表达式解析的解释器模式

下一篇:怎么使用Java桥梁设计模式优雅地将抽象与实现分离

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》