- 浏览: 370302 次
- 性别:
- 来自: Alien
文章分类
最新评论
-
风一样的男人__:
[flash=200,200][url]引用[/url][/f ...
java线程内存模型,线程、工作内存、主内存 -
极乐君:
厉害了,,,请问可以转载到我们专栏吗?会注明来源和地址的~专栏 ...
java线程内存模型,线程、工作内存、主内存 -
zdd001:
Spring 线程池使用 -
zdd001:
Spring 线程池使用 -
u014663756:
看了三行就知道是我想要的!!
java线程内存模型,线程、工作内存、主内存
享元模式
- 博客分类:
- 设计模式
享元模式是对象的结构模式。享元模式以共享的方式高效地支持大量的细粒度对象。
单纯享元模式所涉及到的角色如下:
● 抽象享元(Flyweight)角色 :给出一个抽象接口,以规定出所有具体享元角色需要实现的方法。
● 具体享元(ConcreteFlyweight)角色:实现抽象享元角色所规定出的接口。如果有内蕴状态的话,必须负责为内蕴状态提供存储空间。
● 享元工厂(FlyweightFactory)角色 :本角色负责创建和管理享元角色。本角色必须保证享元对象可以被系统适当地共享。当一个客户端对象调用一个享元对象的时候,享元工厂角色会检查系统中是否已经有一个符合要求的享元对象。如果已经有了,享元工厂角色就应当提供这个已有的享元对象;如果系统中没有一个适当的享元对象的话,享元工厂角色就应当创建一个合适的享元对象。
享元模式由于其共享特性,可以使用在任何池化的操作中,如线程池、数据库连接池等。数据库连接池是享元模式的一个典型应用。在该应用中,需要一个连接池工厂类ConnectPool,它是多个连接Connection的聚集,其结构如图12-26所示。
连接池工厂类ConnectPool具有一个数据集合对象pool,它在构造函数中进行初始化。该类提供了一个单例的工厂类,以防止重复创建该工厂实例,并提供取得连接getConnection()和释放连接freeConnection()函数来分别从共享池中取得和释放一个连接。
其源代码如程序12-47所示。
程序12-47 连接池实例ConnectionPool.java
- package structure.flyweight;
- import java.sql.Connection;
- import java.sql.SQLException;
- import java.util.Vector;
- /**
- * @author liuzhongbing
- * 享元模式-连接池实例
- */
- public class ConnectionPool {
- private Vector<Connection> pool;
- private String url = "jdbc:mysql://localhost:3306/test";
- private String username = "root";
- private String password = "";
- private String driverClassName = "com.mysql.jdbc.Driver";
- /**
- * 连接池的大小,也就是连接池中有多少个数据库连接
- */
- private int poolSize = 100;
- private static ConnectionPool instance = null;
- /**
- * 私有的构造方法,禁止外部创建本类的对象,要想获得本类的对象,
- 通过<code>getIstance</code>方法
- * 使用了设计模式中的单子模式
- */
- private ConnectionPool() {
- pool = new Vector<Connection>(poolSize);
- // 在连接池中创建初始设置的数据库连接
- Connection conn = null;
- for (int i = 0; i < poolSize; i++) {
- try {
- Class.forName(driverClassName);
- conn = java.sql.DriverManager.getConnection(url,
- username, password);
- pool.add(conn);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- /**
- * 返回连接到连接池中
- */
- public synchronized void release(Connection conn) {
- pool.add(conn);
- }
- /**
- * 关闭连接池中的所有数据库连接
- */
- public synchronized void closePool() {
- for (int i = 0; i < pool.size(); i++) {
- try {
- ((Connection) pool.get(i)).close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- pool.remove(i);
- }
- }
- /**
- * 返回当前连接池的一个对象
- */
- public static ConnectionPool getInstance() {
- if (instance == null) {
- instance = new ConnectionPool();
- }
- return instance;
- }
- /**
- * 返回连接池中的一个数据库连接
- */
- public synchronized Connection getConnection() {
- if (pool.size() > 0) {
- Connection conn = pool.get(0);
- pool.remove(conn);
- return conn;
- } else {
- return null;
- }
- }
- }
要使用该连接池,只需要创建一个连接池的实例pool,然后使用getConnection()来取得一个连接执行SQL查询,最后使用freeConnection()来释放连接即可。其源代码如程序12-48所示。
程序12-48 连接池测试类ConnectionPoolTest.java
- package structure.flyweight;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.Statement;
- public class ConnectionPoolTest {
- public static void main(String[] args) throws Exception {
- String sql = "select id,name,phone from guestmessage";
- ConnectionPool pool = ConnectionPool.getInstance();
- for (int i = 0; i < 100; i++) {
- Connection conn = pool.getConnection();
- Statement stmt = conn.createStatement();
- ResultSet rs = stmt.executeQuery(sql);
- while (rs.next()) {
- }
- rs.close();
- stmt.close();
- pool.release(conn);
- }
- pool.closePool();
- }
- }
通过以上连接池的管理,实现了数据库连接的共享,不需要每一次取得连接时都重新创建,因为节省了重复创建数据库连接的开销,使得程序的性能大幅提升。
发表评论
-
模板模式
2012-11-27 01:14 1085我们在看spring中有部分说到持久层,其中有个类Jdb ... -
访问者模式
2012-11-22 02:59 879访问者模式,顾名思义使用了这个模式后就可以在不修改 ... -
门面模式
2012-11-20 01:06 846外部与一个子系统的通信必须通过一个统一的门面(Facade)对 ... -
追MM与设计模式
2012-11-13 16:40 832创建型模式 1、FACT ... -
命令模式
2012-11-04 23:50 8001.概念 其实命令模式像很多设计模式一样——通过在你的请 ... -
职责链模式
2012-10-24 16:13 986职责链模式:使多个对象都有机会处理请求,从而避免请求的发 ... -
桥梁模式
2012-10-23 08:51 1202桥梁模式的用意是把抽象化与实现化脱耦。脱耦是说把抽象和实 ... -
组合模式
2012-10-23 10:07 971组合模式将对象以树形结构组织起来,以达成“部分-整体”的层次结 ... -
适配器模式
2012-10-23 10:46 858把一个类的接口变换成 ... -
原型模式。
2012-10-23 15:06 799创建型模式中还有一种与工厂方法模式完全不同的模式,就是原型 ... -
外观模式
2012-10-24 11:24 1024比如在玩“极品飞车”这款游戏,你只需要等待的就是倒计时 ... -
代理模式和动态代理
2012-10-24 11:24 989所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类, ... -
策略模式
2012-10-22 11:00 1061一.策略模式是对象的行为模式,用意是对一组算法的封装。动 ... -
装饰模式
2012-10-22 10:51 916装饰模式:给一个类添加一些额外的职责,并且在添加这些额外 ... -
java设计模式笔记(菜鸟篇)
2012-10-22 10:36 1173设计模式的分类:分布式编程模式,用户界面模式,数据模型模式三大 ... -
java 建造者模式
2012-10-22 10:19 1001java 建造者模式 建造模式的角色:1: ... -
单例模式
2012-10-22 09:56 967public class SingleTon(){ ... -
工厂方法模式与抽象工厂模式
2012-10-17 16:23 1044总结: 简单工厂模式: public inter ... -
观察者模式
2012-08-31 00:42 1052简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观 ... -
简单工厂模式与工厂方法模式
2012-08-30 23:49 15031:简单工厂模式 UML图: ...
相关推荐
享元模式是软件设计模式中的一种结构型模式,它的主要目的是通过共享大量细粒度对象来减少内存的使用,提高系统性能。在许多场景下,尤其是处理大量相似对象时,享元模式能显著减少内存开销。这个压缩包文件...
享元模式是一种软件设计模式,它的主要目的是为了提高性能,减少对象的创建,尤其是在大量相似对象需要被创建的情况下。在给定的咖啡店案例中,享元模式的应用可以帮助优化内存使用,避免为每杯咖啡的配料表分配独立...
享元模式是一种经典的设计模式,属于结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在许多场景下,特别是计算机编程中,我们可能会遇到大量的相似对象,比如在图形...
享元模式是软件设计模式中的一种结构型模式,它的主要目的是为了提高性能,尤其是在处理大量对象时。在享元模式中,通过共享技术来有效支持大量细粒度的对象,从而减少内存消耗。《设计模式之禅》这本书是设计模式...
享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到降低内存占用的目的。在面向对象编程中,当系统需要创建大量相似对象时,享元模式能够有效地提升性能,因为大部分对象是重复的,...
享元模式是一种优化资源使用的软件设计模式,尤其适用于对象创建成本较高或系统内存有限的情况。在计算机科学中,特别是编程领域,享元模式通过共享大量相似对象来减少内存占用,提高程序性能。它通过将对象的状态...
享元模式是一种设计模式,属于构造型模式,其主要目的是减少对象的数量,通过共享大量相似对象的内部状态来节省内存。这种模式在处理大量细粒度对象时特别有用,能够有效地提高系统的性能。 享元模式的核心是...
享元模式是软件工程中一种用于优化性能的设计模式,它通过共享相似对象的实例来减少内存使用或者计算的开销。在JavaScript编程中,尤其是处理DOM操作和大量相似对象时,享元模式的使用尤为关键。 享元模式的主要...
享元模式是一种优化资源利用、减少对象创建的设计模式,它在Android开发中也有着广泛的应用。在这个"Android享元模式Demo"中,我们将探讨如何在Android环境中实现享元模式,并通过具体的实例来理解其工作原理。 享...
享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到降低系统内存占用、提高性能的目的。在软件工程中,当系统中存在大量相似或重复的对象时,享元模式尤为适用。 享元模式的核心是...
享元模式是软件设计模式中的一种结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在Java中,享元模式常用于处理大量相似对象的场景,例如在图形界面中绘制大量相似的...
在享元模式中可以共享的相同内容称为内部状态(Intrinsic State),而那些需要外部环境来设置的不能共享的内容称为外部状态(Extrinsic State),由于区分了内部状态和外部状态,因此可以通过设置不同的外部状态使得相同...
享元模式是一种结构型设计模式,它通过共享已有对象来减少系统中对象的数量,从而达到降低内存占用的目的。在软件工程中,当一个系统需要处理大量相似对象时,享元模式能够有效地提升性能,尤其在处理轻量级对象时...
享元模式(Flyweight Pattern)是一种结构型设计模式,它能有效地减少系统中对象的数量,从而降低内存消耗,提高性能。这种模式通过共享大量相似对象的内部状态来达到这一目标,而只保留对象的外部状态在外部管理。...
享元模式是设计模式中的一种结构型模式,它主要通过共享已有对象来减少内存中对象的数量,从而提高系统性能。在C#编程中,享元模式尤其适用于那些创建大量相似对象且内存消耗较大的场景。本篇文章将深入探讨享元模式...
享元模式是一种优化资源利用的设计模式,主要用于减少创建和管理对象的数量,以达到节省内存的目的。在软件工程中,尤其是在处理大量相似对象时,享元模式能够显著提高系统的性能。享元模式通过共享那些可以共享的...
享元模式是面向对象设计中的一种结构型模式,它的主要目的是通过共享大量相似对象来减少内存的使用,提高系统的性能。在C#编程语言中,我们可以利用享元模式来优化那些具有大量实例但大部分状态可以共享的对象。在这...
java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) * “元” 理解为 “同一地址对象” * 运用共享技术,减少对象的创建,降低对象的数量,降低内存消耗,提高性能 * ...
享元模式 享元模式(Flyweight Pattern)是一种结构型设计模式,旨在减少大量相似对象的创建,降低系统资源的开销和内存压力。该模式通过共享已经存在的对象来大幅减少需要创建的对象数量,避免创建大量相似类带来...