`
raymond.chen
  • 浏览: 1436907 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

轻量级模式(Flyweight Pattern)

阅读更多

轻量级模式实现对象的共享,从而减少内存分配的开销。该模式通常和工厂模式一起使用。 

 

Flyweight的目的是为了减少内存的消耗而出现的一种模式。因此他是一种解决实现问题的模式,而不是用来解决建模问题的。

 

Flyweight享元设计模式是一种结构型设计模式,它主要解决的问题是:由于(同类)对象的数量太大,采用面向对象时给系统带来了难以承受的内存开销。

 

Flyweight模式的几个要点:
      1、面向对象很好的解决了抽象性的问题,但是作为一个运行在机器中的程序实体,我们需要考虑对象的代价问题。Flyweight设计模式主要解决面向对象的代价问题,一般不触及面向对象的抽象性问题。
     

      2、Flyweight采用对象共享的做法来降低系统中对象的个数,从而降低细粒度对象给系统带来的内存压力。在具体实现方面,要注意对象的状态处理。


 

public class FlyweightFactory{ 
  private Hashtable flyweights = new Hashtable(); 

  public Flyweight getFlyweight(String key ){ 
    Flyweight flyweight = (Flyweight) flyweights.get(key); 

    if(flyweight == null){
      flyweight = new ConcreteFlyweight(); 
      flyweights.put(key, flyweight); 
    } 

    return flyweight; 
  } 
}

 

Flyweight obj = FlyweightFactory.getFlyweight("key");

 
 

 

  • 大小: 21.1 KB
分享到:
评论

相关推荐

    设计模式(C#)之享元模式(Flyweight Pattern)

    享元模式是一种轻量级的内存优化策略,其核心思想是区分内部状态和外部状态。内部状态是对象可以共享的部分,不随环境改变而变化;外部状态是对象状态的一部分,但与对象的身份无关,可以由客户端自行管理。享元模式...

    C#3.0设计模式.pdf

    #### 轻量级模式 (Flyweight Pattern) 轻量级模式是一种结构型设计模式,它用于减少创建大量相似对象所消耗的内存。这种模式通过共享尽可能多的数据来减少对象的数量,从而节省内存空间。轻量级模式适用于对象的...

    [游戏编程模式].(Game.Programming.Patterns).(美)Robert.Nystrom.pdf

    例如,游戏地图的加载可以先加载一个轻量级的代理,随后在需要时才加载完整地图。 10. **享元模式(Flyweight Pattern)**:在处理大量相似但并非完全相同的游戏对象时,享元模式可以有效减少内存占用。通过共享...

    设计模式.docx

    传输对象模式通过在客户端和服务器之间传送轻量级的对象,以减少网络传输的数据量。这种模式适用于需要在分布式环境中高效传输数据的情况。 以上所述的设计模式不仅限于 Java 语言,它们是面向对象编程领域中的通用...

    scala design patterns源书代码

    抽象类可以有具体方法和抽象方法,而特质更像是轻量级接口,可以多重继承。 4. 适配器模式(Adapter Pattern):Scala允许我们使用`with`关键字实现接口的组合,这在适配不同接口时非常有用。 5. 建造者模式...

    桥接模式[收集].pdf

    享元模式(Flyweight Pattern)旨在通过对象共享来节省内存,适用于大量轻量级对象的情况。例如,在围棋程序中,棋子的颜色和形状是内在属性,可以被多个棋子共享,而棋盘上的位置是外在属性,每个棋子各不相同。享...

    软件工程复习题

    #### 2.7 轻量级模式 - **定义**:通常指的是使用共享技术来支持大量细粒度对象的模式。 - **示例**:享元模式(Flyweight Pattern)。 #### 2.8 责任链模式 - **定义**:使多个对象都有机会处理请求,避免请求的...

    FastJava-源码.rar

    FastJava是一个高效、轻量级的Java编程库,它的设计目标是提高Java开发的效率和性能。通过对FastJava源码的深入学习,我们可以了解到许多关于Java编程的最佳实践和优化技巧。下面,我们将对FastJava的源码进行详细...

    超级有影响力霸气的Java面试题大全文档

    HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者...

Global site tag (gtag.js) - Google Analytics