了解现有项目中需要大量重复创建的对象。
将被创建对象的类中的方法进行分析,有公共的方法和私有的方法。
建立一个享元模式工厂类,将需要享元的对象存放在一个池子里面,一般用 hashMap 来存放。
我们就以数据库连接池来做一个例子。我们需要建立一个 net.haicoder.flyweight
包,在该包下面创建 MyDataSource.java
类和 TestMain.java
类。文件创建完毕,目录结构如下图:
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);
}
}
程序运行后,控制台输出如下:
设计模式中享元模式最主要的还是池子的使用,将一些重复的创建对象的过程省略,为系统节省内存资源,其中比较难的点是分清一些共用的方法和私有的方法。区分好这个,掌握享元模式就不难啦。