设计模式——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. }

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

目录
打赏
0
0
0
0
69
分享
相关文章
「全网最细 + 实战源码案例」设计模式——享元模式
享元模式(Flyweight Pattern)是一种结构型设计模式,旨在减少大量相似对象的内存消耗。通过分离对象的内部状态(可共享、不变)和外部状态(依赖环境、变化),它有效减少了内存使用。适用于存在大量相似对象且需节省内存的场景。模式优点包括节省内存和提高性能,但会增加系统复杂性。实现时需将对象成员变量拆分为内在和外在状态,并通过工厂类管理享元对象。
179 92
Java设计模式-享元模式(12)
Java设计模式-享元模式(12)
【十】设计模式~~~结构型模式~~~享元模式(Java)
文章详细介绍了享元模式(Flyweight Pattern),这是一种对象结构型模式,通过共享技术实现大量细粒度对象的重用,区分内部状态和外部状态来减少内存中对象的数量,提高系统性能。通过围棋棋子的设计案例,展示了享元模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了单纯享元模式和复合享元模式以及与其他模式的联用。
【十】设计模式~~~结构型模式~~~享元模式(Java)
js设计模式【详解】—— 享元模式
js设计模式【详解】—— 享元模式
101 6
Java设计模式:享元模式实现高效对象共享与内存优化(十一)
Java设计模式:享元模式实现高效对象共享与内存优化(十一)
Java设计模式之享元模式详解
Java设计模式之享元模式详解
享元模式-大话设计模式
享元模式-大话设计模式
[设计模式 Go实现] 结构型~享元模式
[设计模式 Go实现] 结构型~享元模式
【搞懂设计模式】享元模式:共享节约,皆大欢喜!
【搞懂设计模式】享元模式:共享节约,皆大欢喜!
130 0
[设计模式Java实现附plantuml源码~结构型]实现对象的复用——享元模式
[设计模式Java实现附plantuml源码~结构型]实现对象的复用——享元模式
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等