知识大全 Flyweight(享元)模式
Posted 知
篇首语:敢说敢作敢为, 无怨无恨无悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Flyweight(享元)模式相关的知识,希望对你有一定的参考价值。
Flyweight(享元)模式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
GOF 运用共享技术有效地支持大量细粒度的对象
解释一下概念 也就是说在一个系统中如果有多个相同的对象 那么只共享一份就可以了 不必每个都去实例化一个对象 比如说(这里引用GOF书中的例子)一个文本系统 每个字母定一个对象 那么大小写字母一共就是 个 那么就要定义 个对象 如果有一个 M的文本 那么字母是何其的多 如果每个字母都定义一个对象那么内存早就爆了 那么如果要是每个字母都共享一个对象 那么就大大节约了资源
在Flyweight模式中 由于要产生各种各样的对象 所以在Flyweight(享元)模式中常出现Factory模式 Flyweight的内部状态是用来共享的 Flyweight factory负责维护一个对象存储池(Flyweight Pool)来存放内部状态的对象 Flyweight模式是一个提高程序效率和性能的模式 会大大加快程序的运行速度 应用场合很多 下面举个例子
先定义一个抽象的Flyweight类
public abstract class Flyweight public abstract void operation();
在实现一个具体类
public class ConcreteFlyweight extends Flyweight private String string; public ConcreteFlyweight(String str) string = str; public void operation() System out println( Concrete Flyweight : + string);
实现一个工厂方法类
public class FlyweightFactory private Hashtable flyweights = new Hashtable(); public FlyweightFactory() public Flyweight getFlyWeight(Object obj) Flyweight flyweight = (Flyweight) flyweights get(obj) if(flyweight == null) //产生新的ConcreteFlyweight flyweight = new ConcreteFlyweight((String)obj); flyweights put(obj flyweight); return flyweight; public int getFlyweightSize() return flyweights size();
最后看看Flyweight的调用
public class FlyweightPattern FlyweightFactory factory = new FlyweightFactory(); Flyweight fly ; Flyweight fly ; Flyweight fly ; Flyweight fly ; Flyweight fly ; Flyweight fly ; /** *//** Creates a new instance of FlyweightPattern */ public FlyweightPattern() fly = factory getFlyWeight( Google ); fly = factory getFlyWeight( Qutr ); fly = factory getFlyWeight( Google ); fly = factory getFlyWeight( Google ); fly = factory getFlyWeight( Google ); fly = factory getFlyWeight( Google ); public void showFlyweight() fly operation(); fly operation(); fly operation(); fly operation(); fly operation(); fly operation(); int objSize = factory getFlyweightSize(); System out println( objSize = + objSize); public static void main(String[] args) System out println( The FlyWeight Pattern! ); FlyweightPattern fp = new FlyweightPattern(); fp showFlyweight();
下面是运行结果
Concrete Flyweight : GoogleConcrete Flyweight : QutrConcrete Flyweight : GoogleConcrete Flyweight : GoogleConcrete Flyweight : GoogleConcrete Flyweight : GoogleobjSize =
cha138/Article/program/Java/gj/201311/27378相关参考
享元模式 以共享的方式高效地支持大量的细粒度对象 享元对象的状态 &nbs
Java程序性能优化-享元模式(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-享元模式(2)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! pub
Java程序性能优化-享元模式(2)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
Java包含一个非常简单的享元模式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 具体看如下代码
政府管理的创新模式主要有效率驱动模式、小型化与分权模式、追求卓越模式和__
政府管理的创新模式主要有效率驱动模式、小型化与分权模式、追求卓越模式和_____。A、公共管理市场模式B、公共管理创新模式C、公共服务取向模式D、公共服务购买模式答案:C解析:随着全球化时代的来临,人
知识大全 设计模式(1)Factory模式和Abstract Factory模式
设计模式(1)Factory模式和AbstractFactory模式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
设计模式与VB.net代码外观模式,合成模式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 外观
我的手机怎么才能由夜间模式转为白天模式?谢谢了……请问您指的是什么里面的夜间模式呢?若是浏览器中的夜间模式,您进入浏览器按菜单键选择日间模式即可转换的。您试试的。手机改为夜间模式怎么让他改为白天模式手
魅族手机访客模式和主人模式有什么不同主人模式能控制访客模式能不能安装软件(软件只能在魅族应用中心里面找),以及能不能打电话发信息。然后主人模式里面安装的非系统自带软件,一律不在访客模式里面显示!魅族(