码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 设计模式-享元模式Flyweight(结构型)


    享元模式(Flyweight)

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

    图解

    请添加图片描述

    角色

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

    代码实现

    抽象享元

    public interface Connection {
       void get();
    }
    

    具体享元

    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);
        }
    }
    
    

    享元工厂

    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);
            }
        }
    }
    

    客户端

    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();
            }
        }
    }
    
    连接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
    

    最多产生五个连接对象

  • 相关阅读:
    【MineCraft】-- 如何开设我的世界服务器
    java基于微信小程序的电子产品维修预约系统 uniapp 小程序
    猿创征文 | 2023年必须掌握的DevOps工具推荐(一)
    OpenCV-Python学习(12)—— OpenCV 向图像添加文本(cv.putText、cv.getTextSize)
    免费在线pdf处理工具:pdf文件压缩;pdf文件转word
    【课程笔记】编译原理
    Linux系统使用宝塔面板安装MySQL服务并实现公网远程访问本地数据库【内网穿透】
    人工智能 | ShowMeAI资讯日报 #2022.06.27
    CAD动态块制作
    LeetCode 118. 杨辉三角(及119)
  • 原文地址:https://blog.csdn.net/qq_43676797/article/details/139609575
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号