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");
}
}