享元模式实现

享元模式实现步骤

  1. 了解现有项目中需要大量重复创建的对象。

  2. 将被创建对象的类中的方法进行分析,有公共的方法和私有的方法。

  3. 建立一个享元模式工厂类,将需要享元的对象存放在一个池子里面,一般用 hashMap 来存放。

案例

我们就以数据库连接池来做一个例子。我们需要建立一个 net.haicoder.flyweight 包,在该包下面创建 MyDataSource.java 类和 TestMain.java 类。文件创建完毕,目录结构如下图:

17 享元模式代码结构图.png

MyDataSource.java 代码如下:

package net.haicoder.flyweight; import java.util.LinkedList; public class MyDataSource { private LinkedList<Integer> dataSources = new LinkedList<Integer>(); //初始化连接数量 public MyDataSource() { //一次性创建10个连接 for (int i = 0; i < 4; i++) { try { Integer connection = i; //1、装载sqlserver驱动对象 System.out.println("-----加载驱动"); //2、通过JDBC建立数据库连接 System.out.println("----建立数据库连接"); //3、将连接加入连接池中 dataSources.add(connection); } catch (Exception e) { e.printStackTrace(); } } } public Integer getConnection() { //取出连接池中一个连接 final Integer conn = dataSources.removeFirst(); // 删除第一个连接返回 System.out.println("获取一个连接"); return conn; } //将连接放回连接池 public void releaseConnection(Integer conn) { System.out.println("释放连接"); dataSources.add(conn); } }

TestMain.java 代码如下:

package net.haicoder.flyweight; public class TestMain { public static void main(String[] args) { System.out.println("嗨客网(www.haicoder.net)"); MyDataSource myDataSource = new MyDataSource(); Integer coon = myDataSource.getConnection(); myDataSource.releaseConnection(coon); } }

程序运行后,控制台输出如下:

18 享元模式运行结果图.png

享元模式总结

设计模式中享元模式最主要的还是池子的使用,将一些重复的创建对象的过程省略,为系统节省内存资源,其中比较难的点是分清一些共用的方法和私有的方法。区分好这个,掌握享元模式就不难啦。