`

【转】设计模式——享元模式(Flyweight)

 
阅读更多

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

 

 

 

FlyWeightFactory(1..n)→   FlyWeight

↑↗ ↖

    ClientFlyWeight1    FlyWeight2

 

 

 

FlyWeightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查当前对象池中是否有符合条件的对象。

如果有,就返回已经存在的对象,如果没有,则创建一个新对象,FlyWeight是超类。

一提到共享池,我们很容易联想到Java里面的JDBC连接池,想想每个连接的特点,

我们不难总结出:适用于作共享的一些个对象,他们有一些共有的属性,就拿数据库连接池来说,url、driverClassName、username、password及dbname,

这些属性对于每个连接来说都是一样的,所以就适合用享元模式来处理,

建一个工厂类,将上述类似属性作为内部数据,其它的作为外部数据,在方法调用时,当做参数传进来,这样就节省了空间,减少了实例的数量。

★数据库连接池代码:

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;

Connection conn = null;

 

 

/*构造方法,做一些初始化工作*/

private ConnectionPool() {

pool = new Vector<Connection>(poolSize);

 

 

for (int i = 0; i < poolSize; i++) {

try {

Class.forName(driverClassName);

conn = DriverManager.getConnection(url, username, 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) {

Connection conn = pool.get(0);

pool.remove(conn);

return conn;

} else {

return null;

}

}

}

 

█行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

行为型模式分三类:

父类与子类:(1)策略模式、(2)模板方法模式

两个类之间:(3)观察者模式、(4)迭代子模式、(5)责任链模式、(6)命令模式

类的状态:(7)备忘录模式、(8)状态模式

通过中间类:(9)访问者模式、(10)中介者模式、(11)解释器模式

--------------------- 

作者:panzihao_beijing 

来源:CSDN 

原文:https://blog.csdn.net/PanZiHao_BeiJing/article/details/80417360 

版权声明:本文为博主原创文章,转载请附上博文链接!

分享到:
评论

相关推荐

    设计模式之轻量级Flyweight

    本文将深入探讨“轻量级”设计模式之一——Flyweight(享元)模式,它是如何在减少内存消耗的同时提高系统性能的。 Flyweight模式的核心思想是共享对象,通过复用大量相似对象来减少内存占用。这种模式通常在处理...

    Python设计模式之享元模式原理与用法实例分析

    设计模式——享元模式 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象 对一个类进行的实例,只在第一次使用时建立,其他时候是用同一个实例,减少内存的开销 """ # 抽象网站类 class Web

    设计模式可复用面向对象软件的基础.zip

    4.6 Flyweight(享元)—对象结构型 模式 128 4.7 Proxy(代理)—对象结构型 模式 137 4.8 结构型模式的讨论 144 4.8.1 Adapter与Bridge 144 4.8.2 Composite、Decorator与Proxy 145 第5章 行为模式 147 5.1 CHAIN ...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    2. **结构型模式**:如适配器(Adapter)、装饰器(Decorator)、代理(Proxy)、桥接(Bridge)、组合(Composite)、外观(Facade)和享元(Flyweight)。这些模式处理对象的组合和关系,提供更好的结构和接口,...

    设计模式代码——c#

    11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern...

    设计模式精解——GoF23中设计模式解析

    ### 设计模式精解——GoF23中设计模式解析 #### 重要性与起源 设计模式是软件工程领域的一项重要研究,它提供了一系列解决常见软件设计问题的模板。GoF23指的是由Erich Gamma、Richard Helm、Ralph Johnson和John ...

    享元模式的分析以及实际应用.docx

    享元模式是一种优化资源利用的设计模式,主要用于减少创建和管理对象的数量,以达到节省内存的目的。在软件工程中,尤其是在处理大量相似对象时,享元模式能够显著提高系统的性能。享元模式通过共享那些可以共享的...

    X-gen PPT下载——《研磨设计模式》 实战

    2. **结构型模式**:如适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight)。这些模式处理对象之间的关系...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    设计模式PPT---25种设计模式详解

    6. 享元模式(Flyweight):为了减少大量相似对象的创建,共享内存中的对象。 7. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 行为型模式则关注对象之间的交互和责任分配,包括: 1. 责任...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    - **2.5 Flyweight模式**:享元模式用于减少大量相似对象的内存消耗。 - **2.6 Facade模式**:外观模式为子系统中的一组接口提供一个一致的界面,简化了系统的使用。 - **2.7 Proxy模式**:代理模式提供一个代理...

    design-pattern-java.pdf

    实现对象的复用——享元模式(二) 实现对象的复用——享元模式(三) 实现对象的复用——享元模式(四) 实现对象的复用——享元模式(五) 代理模式-Proxy Pattern 设计模式之代理模式(一) 设计模式之代理模式...

    设计模式 让你轻松理解设计模式,提高开发效率

    享元模式是一种结构型设计模式,它用于减少创建大量相同或相似对象时的内存开销。该模式通过共享技术来有效地支持大量细粒度的对象。文章中通过“MM打招呼”的例子,展示了如何通过享元模式减少对象的数量,从而节省...

    设计模式C++版

    5. Flyweight模式,享元模式,运用共享技术有效地支持大量细粒度的对象。 6. Facade模式,外观模式,为子系统中的一组接口提供一个统一的接口。 7. Proxy模式,代理模式,为其他对象提供一种代理以控制对这个对象的...

    设计模式

    在本文中,我们将深入探讨一种重要的设计模式——享元模式(Flyweight Pattern)。 享元模式是一种结构型设计模式,它的主要目标是有效地支持大量细粒度的对象,通过共享已经存在的对象来减少内存消耗。在面向对象...

    设计模式C++版(pdf版)

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是软件工程领域中一个极为重要的概念,它代表着一系列被广泛接受的解决特定问题的方法。GoF(Gang of Four)所提出的23种设计模式更是...

    设计模式精解-GoF 23种设计模式解析

    ### 设计模式精解——GoF 23种设计模式解析 #### 0. 引言 ##### 0.1 设计模式解析(总序) 设计模式是软件工程领域的一个重要概念,它代表着一系列被广泛接受的解决方案,用于解决特定类型的软件设计问题。通过...

Global site tag (gtag.js) - Google Analytics