`

Flyweight模式 的学习

阅读更多

一、Flyweight模式的意图:

缓存(共享)可以共同的对象、属性,避免创建大量的重复对象、内容。

二、Flyweight模式的特点:

为重复或可共享的对象、属性设置一个缓冲,称为内部属性。这些内部属性一般情况下都是不可修改的,也就是在第一个对象、属性被创建后,就不会去修改了(否则就没意义了)。

除了共享对象、属性之外,还有一些是基于应用环境,或是实时数据,这些无法共享的东西我们称为外部状态。

在Flyweight模式应用中,通常修改的是外部状态属性,而内部状态属性一般都是用于参考或计算时引用。

三、Flyweight模式的构成:


Flyweight模式一般由几个部分组成:

·Flyweight接口(抽象类) :定义了一个可共享的元类
·Flyweight实现类:实现了元类中的操作,而且可能会提供一个用于保存内部状态(共享属性)的空间
·Flyweight Factory:创建Flyweight的工厂类,创建后将其保存到Flyweight Pool中
·Flyweight Pool:缓冲Flyweight对象的池,通常包含在工厂类中


四、Flyweight模式的简单实现

1.Flyweight:

package com.pattern.flyweight2;

public abstract class Flyweight
{
    
public abstract void operation();
}


2.ConcreateFlyweight:
package com.pattern.flyweight2;

public class ConcreateFlyweight extends Flyweight
{
    
private Object key;

    
public ConcreateFlyweight(Object key)
    
{
        
this.key = key;
    }


    @Override
    
public void operation()
    
{
        System.out.println(
"key:" + key);
    }


}

3.FlyweightFactory:

package com.pattern.flyweight2;

import java.util.Hashtable;

@SuppressWarnings(
"unchecked")
public class FlyweightFactory
{
 //Flyweight pool
    
private Hashtable flyweights = new Hashtable();

    
public Flyweight getFlyweight(Object key)
    
{
        Flyweight flyweight 
= null;
        
if(flyweights.containsKey(key))
        
{
            flyweight 
= (Flyweight) flyweights.get(key);
        }

        
if (!flyweights.containsKey(key))
        
{
            flyweight 
= new ConcreateFlyweight(key);
            flyweights.put(key, flyweight);
        }

        
return flyweight;
    }

    
    
public int getFlyweightsSize()
    
{
        
return flyweights.size();
    }

}


4.测试类:

package com.pattern.flyweight2;

public class Client
{
    
private Flyweight f1 = null;
    
private Flyweight f2 = null;
    
private Flyweight f3 = null;
    
private Flyweight f4 = null;
    FlyweightFactory factory 
= new FlyweightFactory();

    
public Client()
    
{
        f1 
= factory.getFlyweight("baidu");
        f2 
= factory.getFlyweight("google");
        f3 
= factory.getFlyweight("baidu");
        f4 
= factory.getFlyweight("google");
    }


    
public void show()
    
{
        f1.operation();
        f2.operation();
        f3.operation();
        f4.operation();
        System.out.println(factory.getFlyweightsSize());
    }


    
public static void main(String[] args)
    
{
        Client client 
= new Client();
        client.show();
    }

}

也就是在缓冲这一点上,体现了Flyweight模式的精髓。

々上善若水々 2008-05-27 10:42 发表评论
分享到:
评论

相关推荐

    设计模式之轻量级Flyweight

    在压缩包文件“TestFlyWeight”中,可能是包含了实现Flyweight模式的一个测试案例,我们可以从中学习如何在实际项目中应用和测试这种模式。通过分析和运行这些测试代码,我们可以更深入地理解享元模式的工作原理及其...

    设计模式学习笔记--Flyweight享元模式.docx

    享元模式的核心是Flyweight类,它是需要被共享的对象,通常包含两个部分:内在状态(Intrinsic State)和外在状态(Extrinsic State)。内在状态是指对象内部不变的部分,可以在多个对象之间共享;外在状态是随环境...

    学习php设计模式 php实现享元模式(flyweight)

    享元模式(Flyweight Pattern)是软件设计中的一种结构型设计模式,它通过共享技术来支持大量细粒度的对象,以此来降低内存中对象的数量。在PHP中实现享元模式,可以帮助我们优化程序性能,特别是在对象数目过多时,...

    设计模式学习笔记大全

    Flyweight模式用于减少大量相似对象的创建,通过共享技术有效地支持大量细粒度的对象。它在内存有限或对象创建代价高昂时特别有用。 10. 装饰模式(Decorator): Decorator模式动态地给对象添加新的行为或责任,它...

    Flyweight.rar

    飞重量(Flyweight)设计模式是一种结构型设计模式,它旨在减少对象的创建,从而节约内存,提高系统性能。在面向对象编程中,当大量相似对象的创建导致资源消耗过大时,飞重量模式就能派上用场。这个模式通过共享...

    设计模式学习笔记总结

    这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...

    C++设计模式代码资源13_Flyweight.zip

    总的来说,"C++设计模式代码资源13_Flyweight.zip"提供了C++实现享元设计模式的实例,对于学习和理解享元模式以及如何在实际项目中应用这一模式具有很高的参考价值。通过深入研究和实践,开发者能够更好地掌握如何...

    C++的设计模式学习资料

    ### C++的设计模式学习资料详解 #### 一、引言 设计模式是在软件工程领域内广泛应用的一种编程思想,它能够帮助开发者解决常见的设计问题,并提供一套标准的解决方案。设计模式通常分为三大类:创建型模式、结构型...

    设计模式 学习伴侣 head first

    在学习过程中,配合《HeadFirst设计模式学习伴侣.jpg》这样的图片资料,可以更好地理解书中的实例和示意图,加深对设计模式本质的理解。这本书不仅适合初学者,也适合有一定经验的开发者用来巩固和提升设计能力。...

    java设计模式中英文各种版本打包下载 学习设计模式必备材料

    Java设计模式是软件工程中的一种最佳实践,它提供了一种在特定情况下解决常见问题的模板。这些模式来自于经验丰富的...这个压缩包中的各种版本的资源,无论是中文还是英文,都能为你的设计模式学习提供宝贵的资料。

    23种Python设计模式示例演示源码包.rar

    23种Python设计模式示例演示源码包,比如包括了工厂模式、Bridge桥接模式、Builder构建模式、Facade外观模式、Adapter适配器模式,Composite组合模式、Decorator装饰器模式,FactoryMethod工厂方法模式、Flyweight享...

    head first设计模式学习代码

    《Head First设计模式学习代码详解》 设计模式是软件工程中的宝贵经验总结,它提供了一套通用的解决方案模板,帮助开发者在面对复杂问题时能够快速有效地进行设计和开发。Head First设计模式是一本非常受欢迎的设计...

    24种设计模式以及混合设计模式

    其中包括代理模式(Proxy)、装饰器模式(Decorator)、适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight)。这些模式帮助我们在不修改原有代码的情况...

    设计模式.pdf_学习模式必备

    设计模式是程式设计中不可或缺的一部分,通过对设计模式的学习和应用,开发者可以提高代码的可读性、可维护性和可扩展性。理解这些模式有助于构建更加高效和灵活的软件系统。无论是初学者还是有经验的开发者,都应该...

    C#语言讲解的设计模式好书

    4. **结构型模式**:如适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight),这些模式关注如何组织类和...

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

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

    23种面向对象设计模式

    文档中的“23种设计模式学习笔记.doc”可能包含了对这23种模式的详细解释和实例,而“设计模式之我爱我家.doc”可能从一个更生活化的角度来阐述设计模式的概念。“软件23种设计模式,超级经典的.pdf”可能是对这些...

    C++二十三种设计模式

    结构型模式则关注如何组合类和对象以形成更大的结构,如适配器模式(Adapter)、桥接模式(Bridge)、装饰器模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、组合模式(Composite)和代理模式...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    - **Flyweight模式**:运用共享技术有效地支持大量细粒度的对象。 - **Facade模式**:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 - **Proxy模式...

Global site tag (gtag.js) - Google Analytics