本文实例讲述了Java设计模式之享元模式。分享给大家供大家参考,具体如下:
<>强解释一下概念:>强也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象。如果有一个1米的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了。那么如果要是每个字母都共享一个对象,那么就大大节约了资源。
在轻量级模式中,由于要产生各种各样的对象,所以在轻量级(享元)模式中常出现工厂模式.Flyweight的内部状态是用来共享的,轻量级选手工厂负责维护一个对象存储池(轻量级选手池)来存放内部状态的对象.Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度。应用场合很多,下面举个例子:
先定义一个抽象的轻量级类:
包轻量级选手; 公共抽象类轻量级{ 公共抽象空操作(); } >之前实现一个具体类:
包轻量级选手; 公开课ConcreteFlyweight延伸轻量级{ 私人字符串的字符串; 公共ConcreteFlyweight (String str) { 字符串=str; } 公共空间操作() { system . out。println(“混凝土——轻量级选手:“+字符串); } } >之前实现一个工厂方法类:
包轻量级选手; 进口java.util.Hashtable; 公开课FlyweightFactory { 私人Hashtable flyweight=new散列表();//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 公共FlyweightFactory () {} 公共轻量级getFlyWeight(对象obj) { 轻量级选手轻量级=(轻量级)flyweights.get (obj);//- - - - - - - - - - - - - - - - - 2 如果(轻量级选手==null){//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3所示//产生新的ConcreteFlyweight 轻量级选手=new ConcreteFlyweight ((String) obj); 轻量级选手。把(obj,轻量级);//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5所示 } 返回flyweight;//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6所示 } 公共int getFlyweightSize () { 返回flyweights.size (); } } >之前这个工厂方法类非常关键,这里详细解释一下:
在1处定义了一个Hashtable用来存储各个对象;在2处选出要实例化的对象,在6处将该对象返回,如果在哈希表中没有要选择的对象,此时变量轻量级为null,产生一个新的轻量级选手存储在哈希表中,并将该对象返回。
最后看看轻量级的调用:
包轻量级选手; 进口java.util.Hashtable; 公开课FlyweightPattern { FlyweightFactory工厂=new FlyweightFactory (); 轻量级选手fly1; 轻量级选手fly2; 轻量级选手fly3; 轻量级选手fly4; 轻量级选手fly5; 轻量级选手fly6;/* * *//* * FlyweightPattern */的创建一个新的实例 公共FlyweightPattern () { fly1=factory.getFlyWeight(“谷歌”); fly2=factory.getFlyWeight (“Qutr”); fly3=factory.getFlyWeight(“谷歌”); fly4=factory.getFlyWeight(“谷歌”); fly5=factory.getFlyWeight(“谷歌”); fly6=factory.getFlyWeight(“谷歌”); } 公共空间showFlyweight () { fly1.operation (); fly2.operation (); fly3.operation (); fly4.operation (); fly5.operation (); fly6.operation (); int objSize=factory.getFlyweightSize (); system . out。println (“objSize=" + objSize); } 公共静态void main (String [] args) { system . out。println(“享元模式!”); FlyweightPattern fp=new FlyweightPattern (); fp.showFlyweight (); } } >之前下面是运行结果:
混凝土——轻量级选手:谷歌
引用>
混凝土——轻量级选手:Qutr
混凝土——轻量级选手:谷歌
混凝土——轻量级选手:谷歌
混凝土——轻量级选手:谷歌
混凝土——轻量级选手:谷歌
objSize=2我们定义了6个对象,其中有5个是相同的,按照轻量级模式的定义“谷歌”应该共享一个对象,在实际的对象数中我们可以看出实际的对象却是只有2个。
Java设计模式之享元模式实例详解