✨这里是第七人格的博客✨小七,欢迎您的到来~✨
🍅系列专栏:设计模式🍅
✈️本篇内容: 享元模式✈️
🍱本篇收录完整代码地址:gitee.com/diqirenge/d... 🍱
楔子
享元模式是一种设计模式,用于减少创建对象的数量,提高系统性能。它通过共享相同状态的对象来减少内存占用和提高性能。和我们之前使⽤原型
模式通过克隆对象的⽅式⽣成复杂对象,有异曲同工之处。
需求背景
我们有一个秒杀系统,秒杀的商品信息是预热后固定不变的,以前我们是直接从数据库中查,现在要求你从内存中加载。
分析设计
在秒杀场景中,可以将商品信息存储在一个共享的数据结构中,如哈希表或缓存。当需要查询某个商品时,首先从共享数据结构中查找,如果找到了就直接返回,否则再创建一个新的商品对象并存储到共享数据结构中。
UML图
根据分析设计,我们可以先画一个简单的UML图,后面通过UML图编码
模块名称
flyweight
模块地址
模块描述
享元模式代码示例
代码实现
1、提供一个简单的产品类
java
/**
* 一个简单的产品类
* 关注公众号【奔跑的码畜】,一起进步不迷路
*
* @author 第七人格
* @date 2023/12/18
*/
public class Product {
private String id;
private String name;
public Product(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2、编写享元工厂
他比一般的工厂多了一个缓存,当需要一个产品时,先在缓存中查找,如果存在,则直接返回,如果不存在,则创建一个新的
java
/**
* 享元工厂
* 他比一般的工厂多了一个缓存,当需要一个产品时,先在缓存中查找,如果存在,则直接返回,如果不存在,则创建一个新的
*
* 关注公众号【奔跑的码畜】,一起进步不迷路
*
* @author 第七人格
* @date 2023/12/18
*/
public class ProductFactory {
private static final Map<String, Product> PRODUCTS = new HashMap<>();
/**
* 在这个示例中,我们使用了一个静态的HashMap来存储共享的商品对象。
* 当需要获取一个商品对象时,首先检查HashMap中是否已经存在该对象,如果不存在,则创建一个新的商品对象并将其添加到HashMap中;
* 如果已经存在,则直接返回该对象。这样可以避免频繁地创建和销毁商品对象,从而提高查询性能。
*
* @param id id
* @param name name
* @return {@link Product}
*/
public static Product createProduct(String id, String name) {
String key = id + "-" + name;
if (!PRODUCTS.containsKey(key)) {
PRODUCTS.put(key, new Product(id, name));
}
return PRODUCTS.get(key);
}
}
3、编写测试类
java
/**
* 享元模式
* 关注公众号【奔跑的码畜】,一起进步不迷路
*
* @author 第七人格
* @date 2023/12/18
*/
public class FlyweightTest {
@Test
public void test_flyweighty() {
Product product1 = ProductFactory.createProduct("1", "商品1");
Product product2 = ProductFactory.createProduct("1", "商品1");
Product product3 = ProductFactory.createProduct("2", "商品2");
// 输出 true,表示 product1 和 product2 是同一个对象
System.out.println(product1 == product2);
// 输出 false,表示 product1 和 product3 不是同一个对象
System.out.println(product1 == product3);
}
}
4、测试结果
true
false
实现要点
享元模式的核心思想是使用一个共享的内存空间来存储相同类型的对象,从而减少对象的创建和销毁开销。
总结
享元模式是一种设计模式,用于减少创建对象的数量,提高系统性能。它通过共享相同状态的对象来减少内存占用和提高性能。和我们之前使⽤原型
模式通过克隆对象的⽅式⽣成复杂对象,有异曲同工之处。享元模式的核心思想是使用一个共享的内存空间来存储相同类型的对象,从而减少对象的创建和销毁开销。