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

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




示例代码如下:


/**
* 抽象数据类型
*
* @time 下午09:25:37
* @author retacn yue
* @Email [email protected]
*/
public interface ExtrinsicState {

}






/**
* flyweight接口
*
* @time 下午09:24:12
* @author retacn yue
* @Email [email protected]
*/
public interface FlyWeight {
public void operation(ExtrinsicState state);
}








/**
* 可共享的
*
* @time 下午09:27:12
* @author retacn yue
* @Email [email protected]
*/
public class ConcreateFlyweight implements FlyWeight {


@Override
public void operation(ExtrinsicState state) {


}
}




/**
* flyweight 工厂类
*
* 用于维护一个flyweigth池
*
* @time 下午09:29:55
* @author retacn yue
* @Email [email protected]
*/
@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 [email protected]
*/
public class UnsharedConcreateFlyweigth implements FlyWeight {


@Override
public void operation(ExtrinsicState state) {


}
}










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














猜你喜欢

转载自retacn-yue.iteye.com/blog/1708235