享元模式(flyweight pattern)是池技术的重要实现方式,可以降低大量重复的、细粒度的类在内存中的开销。
定义:
享元模式的类图如下所示。
享元模式具有以下4个角色:
flyweight.java
public interface flyweight { // 业务方法 public abstract void operation(string extrinsicstate); }
concreteflyweight.java
public class concreteflyweight implements flyweight { private string intrinsicstate;// 内部状态 public concreteflyweight(string intrinsicstate) { this.intrinsicstate = intrinsicstate; } @override public void operation(string extrinsicstate) { system.out.println("内部状态" + intrinsicstate + ",外部状态:" + extrinsicstate); } @override public string tostring() { return "内部状态=" + intrinsicstate; } }
flyweightfactory.java
public class flyweightfactory { private static map<string, flyweight> pool = new hashmap<string, flyweight>(); private flyweightfactory(){} // 私有构造方法 public static flyweight getflyweight(string intrinsicstate) { flyweight flyweight = pool.get(intrinsicstate); if (flyweight == null) { flyweight = new concreteflyweight(intrinsicstate); pool.put(intrinsicstate, flyweight); } return flyweight; } }
client.java
public class client { public static void main(string[] args) { for (int i = 0; i < 5; i++) { flyweight flyweight = flyweightfactory.getflyweight("" + i); flyweight.operation("" + (i + 1)); } flyweight flyweight = flyweightfactory.getflyweight("0"); system.out.println(flyweight); } }
优点:
缺点:
使用场景:
摘自:
青岛东合信息技术有限公司 . 设计模式(java版) . 电子工业出版社,2012,103-105.
如对本文有疑问, 点击进行留言回复!!
网友评论