结构模式之享元模式(FLYWEIGHT)

原创 2013年12月03日 11:22:09

享元模式

  享元模式 (英语:Flyweight Pattern)是一种软件设计模式 。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。

 

 

享元模式 以共享的方式高效地支持大量的细粒度对象。享元对象能做到共享的关键 是区分内蕴状态 外蕴状态

一个内蕴状态是存储在享元对象内部的,并且是不会随环境改变而有所不同的,因此,一个享元可以具有内蕴含状态并可以共享。

一个外蕴状态是随环境改变而改变的,不可以共享的状态,享元对象的外蕴状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部。

 

外蕴状态不可以影响享元对象的内蕴状态,它们是相互独立的。

 

享元模式的种类:单纯享元模式复合享元模式两种形式


在单纯享元模式中,所有的享元对象都是可以共享的

抽象享元角色:此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口,那些需要外蕴状态的操作可以通过调用商业方法以参数形式传入

具体享元角色:实现抽象享元角色所规定的接口,如果有内蕴状态的话,必须负责为内蕴状态提供存储空间,享元对象的内蕴状态必须与对象所处的周围环境无关,从而使得享元对象可以在系统内共享

享元工厂角色:本角色负责创建和管理享元角色,本角色必须保证享元对象可以被系统适当地共享,当一个客户端对象调用一个享元对象的时候,享元工厂角色会检查系统中是否已经有一个复合要求的享元对象,如果有了,享元工厂角色就应当提供这个已有的享元对象;如果系统中没有一个适当的享元对象的话,享元工厂角色就应当创建一个合适的享元对象。

客户端角色:本角色需要维护一个对所有享元对象的引用,本角色需要自行存储所有享元对象的外蕴状态

 

 

2 ,复合享元模式

单纯享元模式中,所有的享元对象都是单纯享元对象,也就是说都是可以直接共享的。如果将一些单纯享元使用合成模式加以复合,形成复合享元对象,这样的复合享元对象本身不能共享,但是他们可以分解成单纯享元对象,然后可以共享。


  • 08c05397-467c-3c4d-88ed-f203abc08b56-thumb.jpg
  • 大小: 29.1 KB
  • 5e791e97-da1e-3382-99e6-c507b3753781-thumb.jpg
  • 大小: 23.6 KB
  • 80b345a9-1af5-37c5-ae43-11bd935631c3-thumb.gif
  • 大小: 4.2 KB
  • eb9d2c40-5354-32de-bef9-1f3a71242e9b-thumb.gif
  • 大小: 5.4 KB
  • 589cbc65-f536-333d-82ad-52e57f685d62-thumb.gif
  • 大小: 4.8 KB

java享元模式(Flyweight)-结构型

Java享元模式(Flyweight设计模式)及在Java中 的应用,例如String类。

享元模式Flyweight(结构型)

享元模式Flyweight(结构型)

JAVA设计模式(12) —<结构型>享元模式(Flyweight)

1 定义: 享元模式(Flyweight) Use sharing to support large numbers of fine-grained objects efficiently.(使用共...

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

设计模式(十)享元模式Flyweight(结构型) 说明: 相对于其它模式,Flyweight模式在PHP实现似乎没有太大的意义,因为PHP的生命周期就在一个请求,请求执行完了,php占用...

结构型模式-----享元模式(Flyweight)

1、享元模式           运用共享技术有效的知识大量细粒度的对象。           他的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销。通常与工厂模式一起使...

结构型模式:享元模式(Flyweight Pattern)

一、设计模式的分类 (如果以前看过关于设计模式的分类的话,这部分可以忽略!) 经过很多大神的总结,目前Java中一共23种经典的设计模式! 按照目的,设计模式可以分为以下三种用途...

【设计模式基础】结构型模式 - 6 - 享元(Flyweight)

1. 模式意图 运用共享技术有效地支持大量细粒度的对象; 如想让某个类的一个实例能用来提供许多“虚拟实例”,就是用享元模式; 享元的优点:             减少运行时对象实例的个数,节省内存;...

JAVA设计模式(08):结构型-享元模式(Flyweight)

当前咱们国家正在大力倡导构建和谐社会,其中一个很重要的组成部分就是建设资源节约型社会,“浪费可耻,节俭光荣”。在软件系统中,有时候也会存在资源浪费的情况,例如在计算机内存中存储了多个完全相同或者非常相...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:结构模式之享元模式(FLYWEIGHT)
举报原因:
原因补充:

(最多只允许输入30个字)