首页 > 其他分享 >设计模式-享元模式

设计模式-享元模式

时间:2023-05-16 13:06:08浏览次数:38  
标签:享元 pool private url 模式 设计模式 conn 连接池


[url]http://zz563143188.iteye.com/blog/1847029[/url]
享元模式(Flyweight)
享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。
[img]http://dl.iteye.com/upload/attachment/0083/1207/f7aae0dd-b250-3829-bb07-49d87069bfbb.jpg[/img]
FlyWeightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查当前对象池中是否有符合条件的对象,如果有,就返回已经存在的对象,如果没有,则创建一个新对象,FlyWeight是超类。一提到共享池,我们很容易联想到Java里面的JDBC连接池,想想每个连接的特点,我们不难总结出:适用于作共享的一些个对象,他们有一些共有的属性,就拿数据库连接池来说,url、driverClassName、username、password及dbname,这些属性对于每个连接来说都是一样的,所以就适合用享元模式来处理,建一个工厂类,将上述类似属性作为内部数据,其它的作为外部数据,在方法调用时,当做参数传进来,这样就节省了空间,减少了实例的数量。
看个例子:
[img]http://dl.iteye.com/upload/attachment/0083/1209/53bc0bf4-cafb-3a12-8574-e20a525f2b72.jpg[/img]
看下数据库连接池的代码:

public class ConnectionPool {  

    private Vector<Connection> pool;  

    /*公有属性*/  
    private String url = "jdbc:mysql://localhost:3306/test";  
    private String username = "root";  
    private String password = "root";  
    private String driverClassName = "com.mysql.jdbc.Driver";  

    private int poolSize = 100;  
    private static ConnectionPool instance = null;  
    Connection conn = null;  

    /*构造方法,做一些初始化工作*/  
    private ConnectionPool() {  
        pool = new Vector<Connection>(poolSize);  

        for (int i = 0; i < poolSize; i++) {  
            try {  
                Class.forName(driverClassName);  
                conn = DriverManager.getConnection(url, username, password);  
                pool.add(conn);  
            } catch (ClassNotFoundException e) {  
                e.printStackTrace();  
            } catch (SQLException e) {  
                e.printStackTrace();  
            }  
        }  
    }  

    /* 返回连接到连接池 */  
    public synchronized void release() {  
        pool.add(conn);  
    }  

    /* 返回连接池中的一个数据库连接 */  
    public synchronized Connection getConnection() {  
        if (pool.size() > 0) {  
            Connection conn = pool.get(0);  
            pool.remove(conn);  
            return conn;  
        } else {  
            return null;  
        }  
    }  
}



通过连接池的管理,实现了数据库连接的共享,不需要每一次都重新创建连接,节省了数据库重新创建的开销,提升了系统的性能!


标签:享元,pool,private,url,模式,设计模式,conn,连接池
From: https://blog.51cto.com/u_3871599/6283470

相关文章

  • 设计模式-组合模式
    [url]http://zz563143188.iteye.com/blog/1847029[/url]组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便,看看关系图:[img]http://dl.iteye.com/upload/attachment/0083/1205/09cab656-5ff9-380e-9df1-326339ac3509.jpg[/img]直接来看代码......
  • 设计模式-原型模式
    [url]http://zz563143188.iteye.com/blog/1847029[/url]原型模式(Prototype)原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。本小结会通过对象的复制,进......
  • 23种设计模式的必备结构图
    这里总结了23种设计模式的结构图及定义,样例代码在Github:studeyang/design-pattern。一、创建型模式1.1简单工厂模式1.2工厂方法模式工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。1.3抽象工厂模式抽象工厂......
  • 【设计模式】使用 go 语言实现简单工厂模式
    最近在看《大话设计模式》,这本书通过对话形式讲解设计模式的使用场景,有兴趣的可以去看一下。第一篇讲的是简单工厂模式,要求输入两个数和运算符号,得到运行结果。这个需求不难,难就难在类要怎么设计,才能达到可复用、维护性强、可拓展和灵活性高。运算符可能是加、减、乘、除,未了方......
  • Java设计模式-简单工厂模式
    简介在软件开发过程中,设计模式是一种被广泛应用的实践,它是通过总结、归纳和提炼出软件设计经验,从而使得设计更加优雅、高效。简单工厂模式是设计模式中最基本、最简单的一种模式,它能够有效地封装对象的创建过程,简化代码结构。简单工厂模式又称为静态工厂方法模式,它是通过定义一......
  • Java设计模式-桥接模式
    简介桥接模式(BridgePattern)是一种结构性设计模式,它的主要作用是将抽象部分和实现部分解耦,使它们可以独立变化而不会互相影响。桥接模式最早由GoF(GangofFour)提出,在《设计模式》一书中有详细的介绍。桥接模式和其他设计模式的区别在于它关注的是如何将抽象和实现分离,从而达到灵......
  • django系列-起源&MTV设计模式
    一、django起源Django是一个开放源代码的Web应用框架,使用Python语言编写完成。由于Python语言是跨平台的,所以,不论操作系统是Windows、Linux还是macOSX,都可以开发Django应用。Web框架是一套组件,提供通用的设计模式,能够最大程度地降低开发Web站点的难度。Django的设计目标就是使开......
  • 湖北省智能科教研究会走进璞华,调研璞公英教学平台个性化教学新模式
    2023年5月9日,热烈祝贺湖北省智能科教研究会红5月智能科教走进璞华集团活动圆满成功。会议上,大家畅所欲言,对教育体制改革与教育信息化产品创新,科技成果转化、产教融合、资源互补、学生能力培养等方面展开充分沟通和探讨。5月9日上午,华中师范大学教授、伍伦贡联合研究院院长、湖北......
  • 工程监测NLM5无线中继采集发送仪的工作模式
    工程监测NLM5无线中继采集发送仪的工作模式 NLM5xx有自动定时启动和随时无线唤醒两种工作模式。可定时启动或者使用无线读数仪将其唤醒采集传感器数据并经LoRA无线发送。多达16通道的传感器接口,最多可连接16个振弦、温度或者模拟信号(电压/电流)。内置大容量存储器,可做为......
  • 并网模式下采用粒子群算法进行微电网经济调度,含有储能调度,有注释。
    并网模式下采用粒子群算法进行微电网经济调度,含有储能调度,有注释。YID:5520653197148522......