设计模式——12享元模式(Flyweight)

简介: 享元模式(Flyweight)

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

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

看下数据库连接池的代码:
[java] view plaincopy

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

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

目录
相关文章
|
7天前
|
设计模式 存储 Java
23种设计模式,享元模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享技术有效地支持大量细粒度对象的重用。这个模式在处理大量对象时非常有用,特别是当这些对象中的许多实例实际上可以共享相同的状态时,从而可以减少内存占用,提高程序效率
44 4
|
7天前
|
设计模式 Java 开发者
【搞懂设计模式】享元模式:共享节约,皆大欢喜!
【搞懂设计模式】享元模式:共享节约,皆大欢喜!
11 0
|
7天前
|
设计模式 存储 Java
[设计模式Java实现附plantuml源码~结构型]实现对象的复用——享元模式
[设计模式Java实现附plantuml源码~结构型]实现对象的复用——享元模式
|
7天前
|
设计模式 Go
[设计模式 Go实现] 结构型~享元模式
[设计模式 Go实现] 结构型~享元模式
|
7天前
|
设计模式 存储 安全
【设计模式系列笔记】享元模式
享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享对象来最小化内存使用或计算开销,以提高性能。该模式适用于需要大量相似对象的场景,通过共享这些相似对象的部分状态,可以有效减少内存消耗。
36 0
|
7天前
|
设计模式 存储 Java
小谈设计模式(27)—享元模式
小谈设计模式(27)—享元模式
|
7天前
|
设计模式 缓存 Java
设计模式之享元模式
设计模式之享元模式
|
7天前
|
设计模式 存储 缓存
【设计模式】享元模式
【设计模式】享元模式
|
7天前
|
设计模式 存储 缓存
聊聊Java设计模式-享元模式
享元(Flyweight)模式:顾名思义就是**被共享的单元**。意图是复用对象,节省内存,提升系统的访问效率。比如在红白机冒险岛游戏中的背景花、草、树木等对象,实际上是可以多次被不同场景所复用共享,也是为什么以前的游戏占用那么小的内存,却让我们感觉地图很大的原因。
19 3
聊聊Java设计模式-享元模式
|
7天前
|
设计模式 存储 Go
Golang设计模式——16享元模式
Golang设计模式——16享元模式
24 0