设计模式(十)享元模式(Flyweight)-结构型

享元模式Flyweight

组合模式解决了对象时树形结构时的处理方式。当系统需要大量使用重复的对象,而这些对象要消耗很大的资源时就需要使用享元模式来解决。

单例模式,一个类只有一个唯一的对象。也就是说,不管new多少次,只需要创建这个类的一个对象,如果不采用单例模式,没new一次就会创建一个对象,这对于系统需要使用大量重复的对象,而这些对象需要消耗很大的资源时,是很不划算的,这时就需要使用享元模式。

数据库连接池就是享元模式的典型应用。

享元模式实现原理

享元模式的实现原理图

享元模式的优缺点

享元模式的优点:减少对象数量,节省内存空间。

享元模式的缺点:维护共享对象,需要额外的开销(用一个线程来维护垃圾回收)。

享元模式的本质:分离和共享。

时间: 2024-10-08 21:49:23

设计模式(十)享元模式(Flyweight)-结构型的相关文章

设计模式-12 享元模式(结构型模式)

一 享元模式 享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用. 主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建. 关键代码:存储相似的对象 使用场景: 1.系统有大量相似对象. 2.需要缓冲池的场景. 类图 : 二 实现代码 Java里面的JDBC连接池,适用于作共享的一些个对象,他们有一些共有的属性,就拿数据库连接 池来说,url.driv

设计模式11: Flyweight 享元模式(结构型模式)

Flyweight 享元模式(结构型模式) 面向对象的代价 面向对象很好的解决了系统抽象性的问题,同时在大多数情况下也不会损及系统的性能.但是,在某些特殊应用中,由于对象的数量太大,采用面向对象会给系统带来难以承受的内存开销.比如图形应用中的图元等对象.字处理应用中的字符对象等. 动机(Motivation) 采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,而带来很高的运行代价——主要指内存需求方面的代价. 如何避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象

设计模式 笔记 享元模式 Flyweight

//---------------------------15/04/20---------------------------- //Flyweight 享元模式------对象结构型模式 /* 1:意图: 运用共享技术有效地支持大量细粒度的对象. 2:动机: 3:适用性: 以下条件都成立时才能使用. 1>一个应用程序使用了大量的对象. 2>完全由于使用大量的对象,造成很大的存储开销. 3>对象的大多数状态都可变为外部状态. 4>如果删除对象的外部状态,那么可以用相对较少的共享对

二十四种设计模式:享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern) 介绍运用共享技术有效地支持大量细粒度的对象. 示例有一个Message实体类,某些对象对它的操作有Insert()和Get()方法,现在要运用共享技术支持这些对象. MessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Flyweight { /// <summary> /// Message实体类 ///

设计模式之享元模式(Flyweight)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还有一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些详细的类的信息封装起来.第二,它们隐藏了这些类的实例是怎样被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,

享元模式(结构型)

思考问题:设计一个围棋游戏,模拟一个下棋动作,如何设计? 解答:很直接的,我们会设计一个棋盘类Chessboard,一个棋子类Chesspiece,每下一枚棋子时就new一个棋子对象(传入颜色.位置),然后将这些棋子装入到一个容器中. 这种简单粗暴的方式确实是解决了问题,但你会发现,棋子永远只有黑白色,棋子对象的函数都是一样的, 主要的变化只是(x,y)位置而已,那能不能单独把(x,y)独立出来让调用者管理(而非记录到棋子内部),让棋子对象变成一个可重用的对象呢?这样就可以避免产生大量棋子对象了

【设计模式】—— 享元模式Flyweight

前言:[模式总览]——————————by xingoo 模式意图 享元模式,也叫[轻量级模式]或者[蝇量级模式].主要目的就是为了减少细粒度资源的消耗.比如,一个编辑器用到大量的字母数字和符号,但是不需要每次都创建一个字母对象,只需要把它放到某个地方共享使用,单独记录每次创建的使用上下文就可以了. 再比如餐馆的桌子,餐具,这些都是享元模式的体现.客户是流动的,每次吃饭都是用饭店固定的那些餐具,而饭店也不需要每次新来顾客,就买新的盘子餐具. 应用场景 1 一个系统应用到了大量的对象,而且很多都是

设计模式之享元模式 FlyWeight

代码实现 1 /** 2 * 享元工厂类 3 * @author bzhx 4 * 2017年3月14日 5 */ 6 public class ChessFlyWeightFactory { 7 //享元池 8 private static Map<String,ChessFlyWeight> map = new HashMap<String,ChessFlyWeight>(); 9 public static ChessFlyWeight getChess(String col

浅谈JAVA设计模式之——享元模式(Flyweight)

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45568799 一.概述 运用共享技术有效地支持大量细粒度的对象. 二.适用性 当都具备下列情况时,使用Flyweight模式: 1.一个应用程序使用了大量的对象. 2.完全由于使用大量的对象,造成很大的存储开销. 3.对象的大多数状态都可变为外部状态. 4.如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象. 5.应用程序不依赖于对象标识.由于Flyweight对

设计模式之十三:Flyweight(享元)—对象结构型模式

2014-06-15 星期日 9:35:04  Flyweight,继续GOF. 1.Intent Use sharing to support large numbers of fine-grained objects efficiently. 运用共享技术有效地支持大量细粒度的对象. 2.Also Known As 3.Motivation A flyweightis a shared object that can be used in multiple contexts simultan