文档章节

享元模式(Flyweight)

Carbenson
 Carbenson
发布于 2015/09/02 10:05
字数 487
阅读 14
收藏 1

享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。

FlyWeightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查当前对象池中是否有符合条件的对象,如果有,就返回已经存在的对象,如果没有,则创建一个新对象,FlyWeight是超类。一提到共享池,我们很容易联想到Java里面的JDBC连接池,想想每个连接的特点,我们不难总结出:适用于作共享的一些个对象,他们有一些共有的属性,就拿数据库连接池来说,url、driverClassName、username、password及dbname,这些属性对于每个连接来说都是一样的,所以就适合用享元模式来处理,建一个工厂类,将上述类似属性作为内部数据,其它的作为外部数据,在方法调用时,当做参数传进来,这样就节省了空间,减少了实例的数量


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

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;
	java.sql.Connection conn=null;

	/*构造方法,做一些初始化工作*/  
	private ConnectionPool() throws SQLException{
		pool=new Vector<Connection>(100);
		for(int i=0;i<poolSize;i++)
		{
			try {
				Class.forName(driverClassName);
				conn =  DriverManager.getConnection(url, username, password);  
				pool.add(conn);
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				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;
		}
	}
}

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

本文转载自:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html

Carbenson
粉丝 19
博文 271
码字总数 84864
作品 0
广州
程序员
私信 提问
面向对象编程设计模式------享元模式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/zengxiantao1994/article/details/90020596   所谓享元模式就是运行...

知行流浪
05/09
0
0
【白话设计模式二十一】享元模式(Flyweight)

白话设计模式 工厂模式 单例模式 【白话设计模式一】简单工厂模式(Simple Factory) 【白话设计模式二】外观模式(Facade) 【白话设计模式三】适配器模式(Adapter) 【白话设计模式四】单例模式...

陶邦仁
2016/04/13
355
0
Java设计模式之-享元模式(Flyweight)

这名字谁起的......简直了...... 说实话,看到这个模式的时候,一头雾水。什么叫享元?什么又叫flyweight?这个名字对理解享元模式起到了极大的反作用。 言归正传,享元,就是共享元数据,而元...

Mock2052
2017/11/30
0
0
Java设计模式11——享元模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xucg/article/details/53054439 一、适用场景   内存属于稀缺资源,不能随意浪费。如果在一个系统中有很多个...

汉森X
2016/11/06
0
0
javascript的享元模式(六)

享元(flyweight)模式是一种用于性能优化的模式,如果系统因为创建大量类似的对象而导致内存占用过高,享元模式就非常有用了。在javascript中,浏览器特别是移动端的浏览器分配的内存并不算...

stone_
2016/05/20
18
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么Netty的FastThreadLocal速度快

前言 最近在看netty源码的时候发现了一个叫FastThreadLocal的类,jdk本身自带了ThreadLocal类,所以可以大致想到此类比jdk自带的类速度更快,主要快在什么地方,以及为什么速度更快,下面做一...

ksfzhaohui
12分钟前
2
0
资治通鉴解析:无论什么条件,要挟权力做出承诺,都会被清算

电影《满城尽带黄金甲》里有句经典的名言“朕赐给你的,才是你的。朕不给你的,你不能抢。”之所以这段话有名,核心的就是,它揭示了这样一个权力心思:无论什么情况,权力的行使,都不愿意受...

太空堡垒185
16分钟前
1
0
CSS技巧之向下箭头

本文转载于:专业的前端网站➫CSS技巧之向下箭头 思路: 使用◇符号(可在输入法的软键盘找到该符号),使用定位选择位置,并隐藏溢出的上半部分 细点: 1.使用i标签的楷体属性把◇变大 2.给i...

前端老手
33分钟前
1
0
SpringCloud alibaba微服务之NACOS多环境配置整合

前言 伴随着spring cloud alibaba 登上主板以后,我就去了解下感觉还是蛮不错的。说实话第一次看见Nacos好长一段时间连读法都不知道...(/nɑ:kəʊs/)。按照官方的话说Nacos是:一个更易于...

攻城狮-飞牛
35分钟前
3
0
tcpdump

tcpdump -A -s0 port 21011 -i any (1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型 (2)-i eth1 : 只抓经过接口eth1的包 (3)-t : 不显...

mskk
40分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部