打字猴:1.700475208e+09
1700475208 注意 如果把一个对象作为Map类的键值,一定要确保重写了equals和hashCode方法,否则会出现通过键值搜索失败的情况,例如map.get(object)、map.contains(object)等会返回失败的结果。
1700475209
1700475210 SignInfo的修改较小,仅在SignInfo中引入该ExtrinsicState外部状态对象,在此不再赘述。我们在来看享元工厂,它是以ExtrinsicState类作为外部状态,如代码清单28-14所示。
1700475211
1700475212 代码清单28-14 享元工厂
1700475213
1700475214 public class SignInfoFactory{
1700475215
1700475216 //池容器
1700475217
1700475218 private static HashMap<ExtrinsicState,SignInfo>pool=new HashMap
1700475219
1700475220 <ExtrinsicState,SignInfo>();
1700475221
1700475222 //从池中获得对象
1700475223
1700475224 public static SignInfo getSignInfo(ExtrinsicState key){
1700475225
1700475226 //设置返回对象
1700475227
1700475228 SignInfo result=null;
1700475229
1700475230 //池中没有该对象,则建立,并放入池中
1700475231
1700475232 if(!pool.containsKey(key)){
1700475233
1700475234 result=new SignInfo();
1700475235
1700475236 pool.put(key,result);
1700475237
1700475238 }else{
1700475239
1700475240 result=pool.get(key);
1700475241
1700475242 }
1700475243
1700475244 return result;
1700475245
1700475246 }
1700475247
1700475248 }
1700475249
1700475250 重点是看看我们的场景类,我们来测试一下性能差异,如代码清单28-15所示。
1700475251
1700475252 代码清单28-15 场景类
1700475253
1700475254 public class Client{
1700475255
1700475256 public static void main(String[]args){
1700475257
[ 上一页 ]  [ :1.700475208e+09 ]  [ 下一页 ]