gamecenter有用代码(一)

1、接口XCacheFactory
public interface XCacheFactory {

    /**
     * 根据指定prefix来获取XCache实例
     * 
     * @param <T>
     * @param prefix 
     * @param klass value的类型
     * @param isCounter 是否用作counter
     * @return
     */
    public <T> XCache<T> getCache(String prefix, Class<T> klass, boolean isCounter);
}


2、XCacheFactoryImpl
public class XCacheFactoryImpl implements XCacheFactory {

    private MemcachedClientFactory memcachedClientFactory = new MemcachedClientFactory();

    public MemCachedClient getMemcachedClient(String namespace) {
        return memcachedClientFactory.getClientByNamespace(namespace);
    }

	@Override
	public <T> XCache<T> getCache(String prefix, Class<T> valueClass, boolean isCounter) {
		return new XCacheImpl<T>(prefix, this, valueClass, isCounter);
	}
}


3、负责{@link MemCachedClient}的创建
public MemcachedClientFactory() {
        init();
    }

    /**
     * 初始化
     */
    public void init() {
        namespaceFactory = ZooKeeperBasedNamespaceFactory.getInstance();
        poolFactory = ZooKeeperBasedPoolFactory.getInstance();
        poolFactory.addCallback(poolConfigModifiedCallback); //注册回调
    }


4、获取时间差
long cur3 = System.currentTimeMillis();
if (logger.isDebugEnabled()) {
                logger.debug("build apppage:" + (System.currentTimeMillis() - cur3));
            }

5、Iterator迭代器的使用
// 匹配appPageSupport
                if (CollectionUtils.isNotEmpty(appPageSupportList)) {
                    for (Iterator<AppPageSupport> iterator = appPageSupportList.iterator(); iterator
                            .hasNext();) {
                        AppPageSupport appPageSupportTemp = (AppPageSupport) iterator.next();
                        if (appPageSupportTemp.getAppPageId() == appPageEntity.getId()) {
                            appPageSupports.add(appPageSupportTemp);
                            iterator.remove();
                        }
                    }
                }


6、ResourceBundle

使用ResourceBundle访问本地资源
        在设计时,我们往往需要访问一些适合本地修改的配置信息,如果作为静态变量,那么每次修改都需要重新编译一个class,.config保存此类信息并不适合,这时我们需要ResourceBundle。
   通过ResourceBundle,我们需要访问位于/WEB-INF/classes目录下的一个后缀名为properties的文本类型文件,从里面读取我们需要的值。

    Locale locale = Locale.getDefault();
    ResourceBundle localResource = ResourceBundle.getBundle("ConnResource", locale);

    String value = localResource.getString("test");
    System.out.println("ResourceBundle: " + value);

    这里对应了/WEB-INF/class/ConnResource.properties文件内容为:

    test=hello world

    打印出来的结果就是hello world


private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("cmsconf");

cmsconf.properties的内容如下:
hot0=[{name:'\u7f8e\u56fe\u79c0\u79c0',url:'/page/22?', photo:'fmn054/original/20110812/1550/large_Qb6h_2890000000875c92.jpg', displayOrder:1},{name:'\u62c9\u9614',url:'/page/16?', photo:'fmn050/original/20110812/1555/large_HNOE_2890000000885c92.jpg', displayOrder:2}]


7、JSON字符串的处理
List<Brand> brands = cache.get(TOP_PAGE_KEY + os, List.class);
String hotStr = RESOURCE_BUNDLE.getString("hot" + os);
if (hotStr != null) {
    JSONArray jarr = JSONArray.fromObject(hotStr);
    brands = (List<Brand>) JSONArray.toCollection(jarr, Brand.class);
            }


8、排序比较
if (CollectionUtils.isNotEmpty(brands)) {
     Collections.sort(brands, new Comparator<Brand>() {

     public int compare(Brand o1, Brand o2) {
         return o1.getOrder() - o2.getOrder();
     };
     });
     cache.save(TOP_PAGE_KEY + os, brands, List.class, pageDefaultCacheTime);
            }


sort(appPageList, new ComparatorAppPage() {

            @Override
            public int compare(AppPage page0, AppPage page1) {
                int compareOrder = 0;
                //如展示顺序相同则比较更新时间
                if (page0.getAddTime() != null && page1.getAddTime() != null) {
                    compareOrder = page0.getAddTime().compareTo(page1.getAddTime());
                    if (compareOrder == 0) {
                        return page0.getDisplayOrder() - page1.getDisplayOrder();
                    } else {
                        return compareOrder;
                    }
                } else {
                    return 0;
                }
            }
        });


9、afterPropertiesSet初始化
 public void afterPropertiesSet() throws Exception {
        Assert.notNull(appPageRelationDAO, "appPageRelationDAO is required!");
        Assert.notNull(appPageDAO, "appPageDAO is required!");
        Assert.notNull(appPageSupportDAO, "appPageSupportDAO is required!");
        Assert.notNull(friendsFacade, "friendsFacade is required!");
    }


10、对修改后的数据进行重新加载(缓存)
public int updateAppPageSupport(AppPageSupport appPageSupport) {
        int result = appPageSupportDAO.update(appPageSupport);
        reloadApp(appPageSupport.getAppPageId());
        return result;
    }


11、List to String
private String[] convertToStringArray(List<Integer> keys) {
        if (CollectionUtils.isEmpty(keys)) {
            return null;
        }
        int listSize = keys.size();
        String[] array = new String[listSize];
        int emptyKey = 0;
        for (int i = 0; i < listSize; i++) {
            Integer key = keys.get(i);
            if (key != null) {
                array[i] = key.toString();
            } else {
                emptyKey++;
            }
        }
        if (emptyKey == listSize) {
            return null;
        }
        return array;
    }


12、List to Integer
private List<Integer> convertToIntegerList(Integer[] keys) {
        if (ArrayUtils.isEmpty(keys)) {
            return null;
        }
        List<Integer> list = new ArrayList<Integer>();
        for (Integer key : keys) {
            list.add(key);
        }

        return list;
    }

你可能感兴趣的:(game)