设计模式之享元(flyweight)

public class Flyweight {

	class FlyweightFactory {
		Hashtable<String, FlyWeight> pool = new Hashtable<String, FlyWeight>();

		public void addFlyWeight(String key, FlyWeight value) {
			pool.put(key, value);
		}
		//其实就是一个池的维护,在创建新对象时,又涉及到工厂模式创建新对象
		public FlyWeight getFlyWeight(String key) {
			FlyWeight fw = pool.get(key);
			if (null == fw) {
				fw = new ConcreteFlyWeight("pool instance key is " + key);
				pool.put(key, fw);
			}
			return fw;
		}
	}

	interface FlyWeight {
		public void print();
	}
	//共享类
	class ConcreteFlyWeight implements FlyWeight {
		String param;

		public ConcreteFlyWeight(String param) {
			this.param = param;
		}

		public void print() {
			System.out.println("flyweight..." + param);
		}
	}
	//不被共享的类
	class UnConcreteFlyWeight implements FlyWeight {
		public void print() {
		}
		
	}
	public static void main(String[] args) {
		Flyweight fw = new Flyweight();
		FlyweightFactory fwf = fw.new FlyweightFactory();
		fwf.addFlyWeight("key1", fw.new ConcreteFlyWeight("key1 flyweight..."));
		fwf.addFlyWeight("key2", fw.new ConcreteFlyWeight("key2 flyweight..."));
		fwf.getFlyWeight("key1").print();
		fwf.getFlyWeight("key2").print();
		fwf.getFlyWeight("key3").print();
	}
}
//http://zuoqiang.iteye.com/blog/743962
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值