Java 之 23 种设计模式解析——12、享元模式(Flyweight)

12、享元模式(Flyweight)

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

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

看个例子:

看下数据库连接池的代码:

1. public class ConnectionPool {
2.
3.	private Vector<Connection> pool;
4.
5.	/*公有属性*/
6.	private String url = "jdbc:mysql://localhost:3306/test";
7.	private String username = "root";
8.	private String password = "root";
9.	private String driverClassName = "com.mysql.jdbc.Driver";
10.
11.	private int poolSize = 100;
12.	private static ConnectionPool instance = null;
13.	Connection conn = null;
14.
15.	/*构造方法,做一些初始化工作*/
16.	private ConnectionPool() {
17.	pool = new Vector<Connection>(poolSize);
18.
19.	for (int i = 0; i < poolSize; i++) {
20.	try {
21.	Class.forName(driverClassName);
22.	conn = DriverManager.getConnection(url, username, password);
23.	pool.add(conn);
24.	} catch (ClassNotFoundException e) {
25.	e.printStackTrace();
26.	} catch (SQLException e) {
27.	e.printStackTrace();
28.	}
29.	}
30.	}
31.
32.	/* 返回连接到连接池 */
33.	public synchronized void release() {
34.	pool.add(conn);
35.	}
36.
37.	/* 返回连接池中的一个数据库连接 */
38.	public synchronized Connection getConnection() {
39.	if (pool.size() > 0) {
40.	Connection conn = pool.get(0);
41.	pool.remove(conn);
42.	return conn;
43.	} else {
44.	return null;
45.	}
46.	}
47. }

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

目录:(点击进入相应页面)

概述、六大原则

一、创建模式

0、简单工厂模式

1.工厂方法模式(Factory Method)

2、抽象工厂模式

3、单例模式(Singleton)

4、建造者模式(Builder)

5、原型模式(Prototype)

二、结构模式(7种)

6、适配器模式

7、装饰模式(Decorator)

8、代理模式(Proxy)

9、外观模式(Facade)

10、桥接模式(Bridge)

11、组合模式(Composite

12、享元模式(Flyweight)

三、关系模式(11种)

13、策略模式(strategy)

14、模板方法模式(Template Method)

15、观察者模式(Observer)

16、迭代子模式(Iterator)

17、责任链模式(Chain of Responsibility)

18、命令模式(Command)

19、备忘录模式(Memento

20、状态模式(State)

21、访问者模式(Visitor)

22、中介者模式(Mediator)

23、解释器模式(Interpreter)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值