-
享元模式(flyweight),运用共享技术有效地支持大量细粒度的对象。
-
享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本都是相同的,有时就能够受大幅度地减少需要实例化类的数量。如果能够把那些参数移到类实例的外面,在方法调用时将他们传递进来。
-
如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用;还有就是对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考虑享元模式。
-
Flyweight.java
/** * 所有具体享元类的超类或接口 */ public abstract class Flyweight { public abstract void Operation(int extrinsicsstate); }
-
ConcreteFlyweight.java
public class ConcreteFlyweight extends Flyweight { @Override public void Operation(int extrinsicsstate) { System.out.println("具体flyweight:" + extrinsicsstate); } }
-
FlyweightFactory.java
public class FlyweightFactory { private Hashtable<String,Flyweight> flyweights = new Hashtable(); public FlyweightFactory() { flyweights.put("x", new ConcreteFlyweight()); flyweights.put("y", new ConcreteFlyweight()); flyweights.put("z", new ConcreteFlyweight()); } public Flyweight getFlyweights(String key) { return (flyweights.get(key)); } }
-
UnsharedConcreteFlyweight.java
public class UnsharedConcreteFlyweight extends Flyweight { @Override public void Operation(int extrinsicsstate) { System.out.println("不共享的具体flyweight:" + extrinsicsstate); } }
-
Main.java
public class Main { public static void main(String[] args) { int extrinsicstate = 22; FlyweightFactory f = new FlyweightFactory(); final Flyweight fx = f.getFlyweights("x"); fx.Operation(--extrinsicstate); final Flyweight fy = f.getFlyweights("y"); fx.Operation(--extrinsicstate); final Flyweight fz = f.getFlyweights("z"); fx.Operation(--extrinsicstate); Flyweight uf = new UnsharedConcreteFlyweight(); uf.Operation(--extrinsicstate); } }
23种设计模式之享元模式(10)
最新推荐文章于 2024-06-15 22:49:27 发布