`
hetaohappy1
  • 浏览: 17559 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

flyWeight 模式

 
阅读更多
一、FlyWeight模式定义:

运用共享技术有效地支持大量细粒度对象。

二、模式解说

也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweight(享元)模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个对象存储池(Flyweight Pool)来存放内部状态的对象。Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度。

三、结构图



享元模式所涉及的角色有抽象享元角色、具体(单纯)享元角色、复合享元角色、享员工厂角色,以及客户端角色等。

抽象享元角色(Flyweight):此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口或抽象类。那些需要外蕴状态(External State)的操作可以通过方法的参数传入。抽象享元的接口使得享元变得可能,但是并不强制子类实行共享,因此并非所有的享元对象都是可以共享的。

具体享元(ConcreteFlyweight)角色:实现抽象享元角色所规定的接口。如果有内蕴状态的话,必须负责为内蕴状态提供存储空间。享元对象的内蕴状态必须与对象所处的周围环境无关,从而使得享元对象可以在系统内共享。有时候具体享元角色又叫做单纯具体享元角色,因为复合享元角色是由单纯具体享元角色通过复合而成的。

复合享元(UnsharableFlyweight)角色:复合享元角色所代表的对象是不可以共享的,但是一个复合享元对象可以分解成为多个本身是单纯享元对象的组合。复合享元角色又称做不可共享的享元对象。这个角色一般很少使用。

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

客户端(Client)角色:本角色还需要自行存储所有享元对象的外蕴状态。

分享到:
评论

相关推荐

    软件模式之Flyweight模式.docx

    《软件模式之Flyweight模式》 Flyweight模式是一种设计模式,其主要目的是通过共享技术来减少内存中对象的数量,从而优化内存使用效率。在对象数量庞大且大部分状态可以外部化的情况下,Flyweight模式尤其适用。它...

    C++ Flyweight模式

    **C++ Flyweight模式** Flyweight模式是一种设计模式,属于结构型模式的一种,它主要解决的是在大量对象创建时可能导致的内存消耗问题。在计算机科学中,尤其是编程领域,内存管理是一个关键的话题,Flyweight模式...

    C#设计模式之Flyweight

    在C#中,Flyweight模式尤其适用于那些内部状态可共享、外部状态可变的对象场景。 享元模式通常包含以下关键角色: 1. **享元接口(Flyweight Interface)**:定义了客户程序与享元对象交互的接口,规定了享元对象能...

    软件模式之Flyweight模式.doc

    软件模式之Flyweight模式.doc

    结构型模式之共享元模式(Flyweight)

    6共享元模式(Flyweight) 用意:以共享的方式高效地支持大量的细粒度对象

    设计模式之轻量级Flyweight

    Flyweight模式的核心思想是共享对象,通过复用大量相似对象来减少内存占用。这种模式通常在处理大量细粒度对象时非常有效,尤其是在这些对象大部分状态都可以外部化的情况下。例如,在文本编辑器中,每个字符可能都...

    java设计模式之Flyweight文.pdf

    Java设计模式中的Flyweight模式是一种结构型设计模式,其主要目标是减少对象的创建,通过共享相似对象来降低内存使用和提高性能。在面向对象编程中,如果对象数量过多,可能会导致内存消耗过大,尤其是在处理大量...

    java设计模式之Flyweight[归纳].pdf

    Java设计模式中的Flyweight模式是一种结构型模式,其主要目的是减少对象的数量,通过共享大量具有相似属性的对象来节省内存和提高性能。Flyweight模式的核心思想是区分对象的内部状态(intrinsic state)和外部状态...

    关于Flyweight模式应用实践的相关介绍

    什么是Flyweight模式? 享元模式(Flyweight Pattern)是一种软件开发中的设计模式,其主要解决的问题是通过类对象的共享,来避免大量创建拥有相同内容的对象的开销。可以简单理解用空间换取时间。 举例说明 一般的...

    angular-flyweight:使用AngularJS的Flyweight模式的示例实现

    使用Flyweight模式的AngularJS 一个示例,展示了如何使用AngularJS 1.4实现Flyweight模式 本地运行 确保已安装 $ git clone https://github.com/iranreyes/angular-flyweight.git # or clone your own fork $ cd ...

    设计模式代码详解(Java篇)

    根据给定文件的信息,本文将对《设计模式代码详解(Java篇)》中涉及的几种设计模式进行深入解析,包括Abstract Factory模式、Singleton模式、Adapter模式、Bridge模式、Facade模式、Proxy模式、Flyweight模式以及...

    C++设计模式之享元模式(Flyweight)

    C++设计模式之享元模式(Flyweight) C++设计模式之享元模式(Flyweight)是一种结构型设计模式,主要用于解决大量相似对象的创建和操作所带来的内存负载问题。该模式的主要设计目标是通过共享对象来减少内存负载,...

    23种设计模式的uml表示

    UML图示例展示了单纯Flyweight模式和复合Flyweight模式的结构。 #### 9. Bridge 模式 - **Bridge 模式**:Bridge模式用于将抽象化与实现化解耦,使得两者可以独立变化。这种模式可以帮助开发者管理系统的可变因素...

    Java设计模式之共享模式/享元模式(Flyweight模式)介绍

    享元模式是一种结构型设计模式,它通过共享已有对象来减少对系统资源的消耗,从而提高性能。在Java中,享元模式常用于处理大量相似对象的场景,尤其是在内存管理中,通过对象复用来减少内存占用。以下是享元模式的...

    JavaScript设计模式与开发实践.pdf

    由浅入深地讲解了16个设计模式,包括 singleton模式、Factory模式、Abstract Factory模式、Builder模式、Prototype模式、Adapter模式、Bridge模式、Composite模式、Decorator模式、Flyweight模式、Proxy模式、Chain ...

    设计模式原理与应用之结构型模式.pptx

    在需要大量相似对象的场景下,如文本编辑器中的字符显示,Flyweight模式可以极大地提高效率。 7. **Proxy模式**: - Proxy模式为其他对象提供一个代理,以控制对该对象的访问。代理对象可以增加额外的功能,如缓存...

    C++设计模式.pdf

    Flyweight模式通过共享技术有效支持大量细粒度的对象,可以大幅度减少内存占用并提高性能。 #### Facade模式 Facade模式为子系统中的一组接口提供一个一致的界面,定义了一个高层接口,这个接口使得这一子系统更加...

    设计模式专题---设计模式示例代码(全)(python--c++)

    9. **Flyweight模式**:Flyweight模式属于结构型设计模式,用于减少大量细粒度对象的创建,通过共享对象来支持大量的对象实例,特别适用于内存有限的环境。 10. **Iterator模式**:Iterator模式是一种行为设计模式...

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

    对于系统中有大量相似对象时,使用Flyweight模式可以显著减少内存占用。 6. **Facade模式** Facade模式为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易...

Global site tag (gtag.js) - Google Analytics