设计模式-享元模式Flyweight(结构型)

享元模式(Flyweight)

享元模式是一种结构型模式,它主要用于减少创建对象的数量,减少内存占用。通过重用现有对象的方式,如果未找到匹配对象则新建对象。线程池、数据库连接池、常量池等池化的思想就是享元模式的一种应用。

图解

角色

  1. 享元工厂:负责创建和管理享元对象,通常包含一个池用于存储和复用已经创建的享元对象
  2. 具体享元:实现抽象元接口,包含内部和外部状态,内部状态可被分享,外部状态由客户端传递
  3. 抽象享元:定义具体享元和非共享享元接口,通常包含设置外部状态的方法
  4. 客户端:使用享元工厂获取享元对象,并通过设置外部状态来操作享元对象。客户端通常不需要关心享元对象的具体实现

代码实现

抽象享元

java 复制代码
public interface Connection {
   void get();
}

具体享元

java 复制代码
public class JdbcConnection implements Connection{
    private String id;

    public JdbcConnection(String id) {
        this.id = id;
    }

    @Override
    public void get() {
        System.out.println("连接ID为:" + this.id);
    }
}

享元工厂

java 复制代码
public class JdbcConnectionFactory {
    List<Connection> list = new ArrayList<>();
    private int count = 5;
    private Random random = new Random();
    public Connection getConnection(){
        if(list.size() < count){
            JdbcConnection jdbcConnection = new JdbcConnection(UUID.randomUUID().toString());
            list.add(jdbcConnection);
            return jdbcConnection;
        }else {
            int i = random.nextInt(4);
            return list.get(i);
        }
    }
}

客户端

java 复制代码
public class Test {
    public static void main(String[] args) {
        JdbcConnectionFactory jdbcConnectionFactory = new JdbcConnectionFactory();
        for (int i = 0; i < 6; i++) {
            Connection connection = jdbcConnectionFactory.getConnection();
            connection.get();
        }
    }
}
shell 复制代码
连接ID为:406ba526-7a07-41e4-9a4d-6df479aa9bce
连接ID为:f9bc31c7-77d0-4a4f-90b2-166e9656c9ac
连接ID为:81e52b30-7c49-4ffa-b6bb-dd3c0863d0b4
连接ID为:bd124c69-db5e-4a84-a9ee-1ba56fc12990
连接ID为:f953b8fd-ac5c-4988-9fec-b7660669700e
连接ID为:bd124c69-db5e-4a84-a9ee-1ba56fc12990

最多产生五个连接对象

相关推荐
半夏知半秋3 分钟前
游戏登录方案中常见的设计模式整理
服务器·开发语言·笔记·学习·游戏·设计模式·lua
Asort5 小时前
JavaScript设计模式(十八)——备忘录模式:状态保存与恢复的艺术
前端·javascript·设计模式
原来是好奇心5 小时前
告别if-else!使用策略模式优雅处理多种MQTT消息类型
java·mqtt·设计模式·策略模式·emqx
AY呀6 小时前
# 从 HTML5 敲击乐到前端工程化:模块化开发如何重塑交互体验
设计模式
天南星6 小时前
23种设计模式-深度讲解-7. 装饰器模式 (Decorator)
后端·设计模式
hans汉斯6 小时前
【计算机科学与应用】基于多光谱成像与边缘计算的物流安全风险预警模式及系统实现
大数据·数据库·人工智能·设计模式·机器人·边缘计算·论文笔记
杯莫停丶7 小时前
设计模式之:适配器模式
设计模式·适配器模式
xiezhr7 小时前
见过哪些醍醐灌顶的Java代码:从"卧槽"到"原来如此"的顿悟
java·后端·设计模式
WaWaJie_Ngen8 小时前
【设计模式】适配器模式(Adapter)
设计模式·适配器模式
Mr_WangAndy18 小时前
C++设计模式_行为型模式_策略模式Strategy
c++·设计模式·策略模式·依赖倒置原则