java 设计模式学习笔记十一flyweight享元设计模式

flyweight享元设计模式
避免拥有相同内容的小类的开销,共享一个元类

 


示例代码如下:


/**
 * 抽象数据类型
 * 
 * @time 下午09:25:37
 * @author retacn yue
 * @Email zhenhuayue@sina.com
 */
public interface ExtrinsicState {

}






/**
 * flyweight接口
 * 
 * @time 下午09:24:12
 * @author retacn yue
 * @Email zhenhuayue@sina.com
 */
public interface FlyWeight {
public void operation(ExtrinsicState state);
}








/**
 * 可共享的
 * 
 * @time 下午09:27:12
 * @author retacn yue
 * @Email zhenhuayue@sina.com
 */
public class ConcreateFlyweight implements FlyWeight {


@Override
public void operation(ExtrinsicState state) {


}
}




/**
 * flyweight 工厂类
 * 
 * 用于维护一个flyweigth池
 * 
 * @time 下午09:29:55
 * @author retacn yue
 * @Email zhenhuayue@sina.com
 */
@SuppressWarnings("rawtypes")
public class FlyweightFactory {
private Hashtable flyweights = new Hashtable();


@SuppressWarnings("unchecked")
public FlyWeight getFlyweight(Object key) {
FlyWeight flyweight = (FlyWeight) flyweights.get(key);
if (null == flyweight) {
// 产生共享
flyweight = new ConcreateFlyweight();
// 放入池中
flyweights.put(key, flyweight);
}
return flyweight;
}


}










/**
 * 不共享的
 * 
 * @time 下午09:28:55
 * @author retacn yue
 * @Email zhenhuayue@sina.com
 */
public class UnsharedConcreateFlyweigth implements FlyWeight {


@Override
public void operation(ExtrinsicState state) {


}
}










/**
 * 测试flyweight
 * 
 * @time 下午09:35:17
 * @author retacn yue
 * @Email zhenhuayue@sina.com
 */
public class TestFlyweight {
public static void main(String[] args) {
FlyweightFactory factory = new FlyweightFactory();
FlyWeight flyWeight1 = factory.getFlyweight("test1");
FlyWeight flyWeight2 = factory.getFlyweight("test2");
}
}















posted @ 2012-10-19 21:37  retacn_yue  阅读(159)  评论(0编辑  收藏  举报