`

【转】设计模式——享元模式(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 

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

分享到:
评论

相关推荐

    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 ...

    设计模式代码——c#

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

    design-pattern-java.pdf

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

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

    4.6 FLYWEIGHT(享元)——对象结构型模式 4.7 PROXY(代理)——对象结构型模式 4.8 结构型模式的讨论 第五章 行为模式 5.1 CHAIN OF RESPONSIBIL ITY(职责链)——对象行为型模式 5.2 COMMAND(命令)——对象...

    管理系统javasal源码-Design-Patterns-Demo:超全的设计模式——理论+实现demo

    管理系统java sal源码 [toc] 设计模式 源码地址: 博客地址: 分类 序号 模式 & ...创建型模式:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑...Pattern)享元模式(Flyweight Pattern)代理模式(Proxy Pattern)

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

    pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/...

    C#23种设计模式_示例源代码及PDF

    享元模式:FLYWEIGHT 在拳击比赛中指最轻量级。享元模式以共享的方式高效的支持大量 享元模式 的细粒度对象。 享元模式能做到共享的关键是区分内蕴状态和外蕴状态。 内蕴状态存储在享 元内 部,不会随环境的改变而...

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

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码 目 录 0 引言 ............................................................................................................................................

    java高手真经 (UML建模+设计模式+面向服务架构) 卷8

    pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷3

    pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 ...

    C#23种设计模式

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

    java高手真经 (UML建模+设计模式+面向服务架构) 卷10

    pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷5

    pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷1

    pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷2

    pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷7

    pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷9

    pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷4

    pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 ...

    asp.net知识库

    动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...

Global site tag (gtag.js) - Google Analytics