享元模式(Flyweight)

之前看设计模式一直记不住享元模式是什么意思,为了好几我是这样子理解的,享是共享的意思,元是对象的意思,组合起来就是共享对象,即使共享池。当系统对象多的时候,对象进行共享可以减少系统的开销。共享池最好的例子还是JDBC的连接池,想想每个连接的特点,我们不难总结出:适用于作共享的一些对象,他们有一些共有的属性,就拿数据库连接池来说,url、driverClassName、username、password及dbname,这些属性对于每个连接来说都是一样的,所以就适合用享元模式来处理,建一个工厂类,将上述类似属性作为内部数据,其它的作为外部数据,在方法调用时,当做参数传进来,这样就节省了空间,减少了实例的数量。


import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Vector;

import com.mysql.jdbc.Connection;

public class ConnectionPool {
  private Vector<Connection> pool;
  private String url=FileUtils.getConfig("db.url");
  private String name = FileUtils.getConfig("db.username");
  private String password = FileUtils.getConfig("db.password");
  private String driverClassName = FileUtils.getConfig("db.driver");
  
  private int poolSize = 100;
  private static ConnectionPool instance = null;
  Connection conn = null;
  static{
	  getInstance();
  }
  private ConnectionPool(){
	  pool = new Vector<Connection>(poolSize);
	  for(int i=0; i< poolSize;i++){
		  try {
			Class.forName(driverClassName);
		    conn = (Connection) DriverManager.getConnection(url, name, 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){
		  return null;
	  }
	  Connection conn = pool.get(0);
	  pool.remove(conn);
	  return conn;
  }
  
  //获得连接池实例对象
  public static ConnectionPool getInstance(){
	  if(instance == null){
		  syscInit();
	  }
	  return instance;
  }
  
  //初始化连接池
  private static synchronized void syscInit() {
	if(instance == null){
		instance = new ConnectionPool();
	}
	
  }
  
  public static void main(String[] args) {
	ConnectionPool connectionPool = ConnectionPool.getInstance();
	connectionPool.getConnection();
	
 }
  
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值