flyweight享元模式是实现对象的共享,减少重复数据的存储,从而减少内存分配的开销。享元模式融合了工厂模式和单例模式的思想,实际上也可以说享元模式是特殊的工厂模式。
如果要创建同个对象的n个实例,而通常这n个实例中的m个属性的值大部分或全部是相同的,那么最坏的情况就会有n*m个相同的数据占据了不同的内存空间,如果n*m的值较大的话,就可以考虑flyweight享元模式了。享元模式就把这m个相同的属性提取出来,结合单例模式和工厂模式,来实现相同属性值的实例分配到同一块内存空间(这样就只占用了1*m个内存空间了)。这m个属性通常叫内在信息,而其他会动态变化的信息叫外部信息。
享元模式的基本架构:
public interface FlyweightIntr {//接口
public String get();
}
public class FlyweightFactory {//享元工厂
private HashMap lstFlyweight;
private static FlyweightFactory factory = new FlyweightFactory();
private FlyweightFactory() {
lstFlyweight = new HashMap();
}
public synchronized FlyweightIntr getFlyweight(String str) {//根据str获取FlyweightIntr实例
if (lstFlyweight.get(str) == null) {//如果不存在,则新建
FlyweightIntr fw = new Flyweight(str);
lstFlyweight.put(str, fw);
return fw;
} else {//如果已经记录了,则获取
return (FlyweightIntr) lstFlyweight.get(str);
}
}
public static FlyweightFactory getInstance() {//享元工厂
return factory;
}
private class Flyweight implements FlyweightIntr {
private String str;
private Flyweight(String str) {
this.str = str;
}
private void set(String str) {
this.str = str;
}
public String get() {
return str;
}
}
public class MyClass {
String myStr;
FlyweightIntr obj;
public MyClass(String myStr, FlyweightIntr fw) {
this.myStr = myStr;
obj = fw;
}
public void print() {
System.out.println(myStr+" "+obj.get());
}
}
public class Main{
public static void main(String args[]){
FlyweightFactory factory = FlyweightFactory.getInstance();
FlyweightIntr flyweight = factory.getFlyweight("1");
MyClass myClass = new MyClass("a",flyweight);
myClass.print();
flyweight = factory.getFlyweight("1");
myClass = new MyClass("b",flyweight);
myClass.print();
flyweight = factory.getFlyweight("2");
myClass = new MyClass("c",flyweight);
myClass.print();
flyweight = factory.getFlyweight("2");
myClass = new MyClass("d",flyweight);
myClass.print();
}
}
利用享元模式的思想,进一步的演化,可以把一些不变的数据,放在外部文件作为模版,以便复用。
分享到:
相关推荐
享元模式是面向对象设计中的一种结构型模式,它的主要目的是通过共享大量相似对象来减少内存的使用,提高系统的性能。在C#编程语言中,我们可以利用享元模式来优化那些具有大量实例但大部分状态可以共享的对象。在这...
C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构型模式)
享元模式的核心是Flyweight类,它是需要被共享的对象,通常包含两个部分:内在状态(Intrinsic State)和外在状态(Extrinsic State)。内在状态是指对象内部不变的部分,可以在多个对象之间共享;外在状态是随环境...
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第12节:结构型模式Flyweight享元模式
总结来说,FlyWeight享元模式是一种优化内存使用的设计策略,通过共享对象减少系统中对象的数量,从而提高系统效率。理解并合理运用享元模式,对于编写高效且资源友好的代码至关重要。在开发过程中,我们需要识别...
享元模式是一种设计模式,主要用于减少对象的创建,从而提高性能和降低内存占用。在C++编程中,享元模式的应用能够帮助优化内存管理和提高程序效率。享元模式的核心思想是区分对象的内部状态(intrinsic state)和...
享元模式(Flyweight Pattern)是一种结构型设计模式,它能有效地减少系统中对象的数量,从而降低内存消耗,提高性能。这种模式通过共享大量相似对象的内部状态来达到这一目标,而只保留对象的外部状态在外部管理。...
享元模式是设计模式中的一种结构型模式,它主要通过共享已有对象来减少内存中对象的数量,从而提高系统性能。在C#编程中,享元模式尤其适用于那些创建大量相似对象且内存消耗较大的场景。本篇文章将深入探讨享元模式...
享元模式(Flyweight Pattern)是一种结构型设计模式,用于减少创建大量小对象所带来的内存开销。通过共享对象,享元模式能够有效地支持大量细粒度的对象,减少内存使用并提高性能。它常用于需要大量重复对象的场景...
1. 抽象享元(Flyweight)角色: 抽象享元是享元模式的核心,定义了一个公共接口,为客户端提供了操作共享对象的途径。在Java中,这个角色通常表现为一个接口,例如`Letter`,包含所有可能的操作。 2. 具体享元...
享元模式是软件设计模式中的一种结构型模式,它的主要目的是通过共享大量细粒度对象来减少内存的使用,提高系统性能。在许多场景下,尤其是处理大量相似对象时,享元模式能显著减少内存开销。这个压缩包文件...
享元模式(Flyweight Pattern)是软件设计中的一种结构型设计模式,它通过共享技术来支持大量细粒度的对象,以此来降低内存中对象的数量。在PHP中实现享元模式,可以帮助我们优化程序性能,特别是在对象数目过多时,...
享元模式(Flyweight Pattern)是设计模式中的一种优化模式,主要用于减少创建大量相似对象所需的内存消耗。在C++程序设计中,当系统中存在大量的相同或相似的对象时,使用享元模式可以有效地降低内存占用,提高系统...
比如包括了工厂模式、Bridge桥接模式、Builder构建模式、Facade外观模式、Adapter适配器模式,Composite组合模式、Decorator装饰器模式,FactoryMethod工厂方法模式、Flyweight享元模式,Interpreter解释器模式,...
复合享元模式则引入了享元工厂(Flyweight Factory)来管理和创建享元对象。享元工厂负责管理享元对象池,并根据需要向客户端提供享元对象。当请求的对象不在池中时,工厂会创建新的享元对象;如果存在相同的内蕴...
享元模式是一种经典的设计模式,属于结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在许多场景下,特别是计算机编程中,我们可能会遇到大量的相似对象,比如在图形...
在“Flyweight”这个文件中,我们可以预期找到的是一个关于享元模式的代码实现。这个文件可能包含了一个享元接口,若干个实现了该接口的具体享元类,以及一个享元工厂类。享元接口定义了对外暴露的方法,这些方法...
享元模式的核心是享元对象(Flyweight),它是一个可以被共享的类,通常包含一些共享状态(Static State)和不共享状态(External State)。共享状态是在所有享元对象之间共享的数据,它们不会因对象的不同而改变;...