设计模式之享元模式
2011-02-10 17:41 hanwesley 阅读(193) 评论(0) 收藏 举报Flyweight模式中常出现Factory模式
.Flyweight的内部状态是用来共享的
Flyweight factory负责维护一个Flyweight pool(模式池)来存放内部状态的对象.
Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度.
应用场合很多:比如你要从一个数据库中读取一系列字符串,这些字符串中有许多是重复的,那么我们可以将这些字符串储存在Flyweight池(pool)中.
package org.springframework.samples.jpetstore.dp.flyweight;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/***
* 享元模式
* 享元:可理解为:共享元对象,共享细粒度对象
* 用来将实例放入一个Map中,共同的特征只产生一个实例
* 将不可共享的状态通过参数的方式由客户端传入
* 通过共享的方式,达到支持大量细粒度对象
* 目的:节省空间资源,实现系统性能的改善
* @author hanwesley
* @version 1.0.0
*
*/
abstract class FlyWeight {
public abstract void operator();
}
//可以共享对象
class ConcreteFlyweight extends FlyWeight {
public void operator() {
System.out.println("ConcreteFlyweight");
}
}
//不是所有的对象都需要共享。
class UnSharedConcreateFlyweigth extends FlyWeight {
public void operator() {
System.out.println("UnSharedConcreateFlyweigth");
}
}
//享元模式主要要提供这个工厂类,统一获得实例对象的入口。
class FlyWeightFactory {
private Map<String, FlyWeight> map = Collections
.synchronizedMap(new HashMap<String, FlyWeight>());
public FlyWeight getInstance(String key) {
if (map.containsKey(key)) {
return map.get(key);
} else {
FlyWeight fly = new ConcreteFlyweight();
map.put(key, fly);
return fly;
}
}
}
public class FlyWeightMain {
public static void main(String[] args) {
FlyWeightFactory factory = new FlyWeightFactory();
FlyWeight fly1 = factory.getInstance("A");
fly1.operator();
FlyWeight fly2 = factory.getInstance("A");
fly2.operator();
System.out.println("fly1 == fly2 :" + (fly1 == fly2));
FlyWeight fly3 = factory.getInstance("B");
fly3.operator();
System.out.println("fly1 == fly3 :" + (fly1 == fly3));
FlyWeight unsharedFly = new UnSharedConcreateFlyweigth();
unsharedFly.operator();
}
}
浙公网安备 33010602011771号