zoukankan      html  css  js  c++  java
  • Refactoring: Encapsulate Collection

    今天看NFS-RPC的源码,看到有这样的代码:Collections.unmodifiableList(servers);突然想起来自己之前看重构时的一种叫Encapsulate Collection的思想,今天以代码为主线再来回顾下:

    1public class Company {
    2 
    3    private String companyName;//the name of company
    4    private List<String> clerkList;//the clerk list
    5     
    6    //companyName,clearList getter and setter method
    7    ........
    8}

    我们封装了一个公司类,公司类中包含一个公司名和公司员工的属性,其中公司员工使用List存放。看似完美,然后我们在其他地方使用Company这个类:

    1Company company = new Company();
    2List<String> list = company.getClerkList();
    3list.add("guolei");

    有没有发现什么怪异的地方?在我们获得list的引用后,可以直接操作list,而无需通过company对象。在面向对象的角度来看,这是不正确的设计思想。同样这样的代码看起来也不优雅。这个时候我们引出Collections.unmodifiableList()方法,这个方法的作用是:

    1Returns an unmodifiable view of the specified collection.

    也就是返回一个集合,这个集合就像我们数据库的视图一样,只能read,而不能write。

    好了,现在我开始改编我的那个不太优雅的Company类:

    01public class Company {
    02 
    03    private String companyName;//the name of company
    04    private List<String> clerkList = new ArrayList<String>();//the clerk list
    05     
    06    public void setCompanyName(String companyName) {
    07        this.companyName = companyName;
    08    }
    09    /**
    10     * return a view of clerkList
    11     * <a href="http://my.oschina.net/u/556800" class="referer" target="_blank">@return</a>  clerk list
    12     */
    13    public List<String> getClerkList() {
    14        return Collections.unmodifiableList(clerkList);
    15    }
    16    /**
    17     * add a clerk
    18     * @param clerkName
    19     */
    20    public void addClerk(String clerkName){
    21        clerkList.add(clerkName);
    22    }
    23    /**
    24     * remove the clerk
    25     * @param clerkName
    26     */
    27    public void removeClerk(String clerkName){
    28        clerkList.remove(clerkName);
    29    }
    30}

    利用Collections的视图方法后,代码变的更加优美,更加健壮。 
  • 相关阅读:
    【流量劫持】SSLStrip 终极版 —— location 瞒天过海
    【流量劫持】沉默中的狂怒 —— Cookie 大喷发
    【流量劫持】SSLStrip 的未来 —— HTTPS 前端劫持
    Web 前端攻防(2014版)
    流量劫持 —— 浮层登录框的隐患
    流量劫持能有多大危害?
    流量劫持是如何产生的?
    XSS 前端防火墙 —— 整装待发
    XSS 前端防火墙 —— 天衣无缝的防护
    XSS 前端防火墙 —— 无懈可击的钩子
  • 原文地址:https://www.cnblogs.com/chenying99/p/2750500.html
Copyright © 2011-2022 走看看