提炼函数案例 一次循环中完成多个任务

提炼函数案例 一次循环中完成多个任务

参考

修改代码的艺术 6.1 新生方法

原始代码

需求:只对没有发布过的entry进行发布日期并且添加到列表中。

public class TransactionGate{
    public void postEntries(List entries){
        for(Iterator it = entries.iterator(); it.hasNext();){
            Entry entry = (Entry) it.next();
            entry.postDate();
        }
        transactionBundle.getListManager().add(entriesToAdd);
    }
}

方式一

public class TransactionGate{
    /*
    我们将2个操作混在一起了:一个是日期发送,另一个是重复项检查。
    */
    public void postEntries(List entries){
        List entriesToAdd = new LinkedList();
        for(Iterator it = entries.iterator(); it.hasNext();){
            Entry entry = (Entry) it.next();
            if(!transactionBundle.getListManager().hasEntry(entry){
                entry.postDate();
                entriesToAdd.add(entry);
            }
        }
        transactionBundle.getListManager().add(entriesToAdd);
    }
}

方式二

public class TransactionGate{
    public List uniqueEntries(List entries){
        List result = new LinkedList();
        for(Iterator it = entries.iterator(); it.hasNext();){
            Entry entry = (Entry) it.next();
            if(!transactionBundle.getListManager().hasEntry(entry){
                result.add(entry);
            }
        }
        return result;
    }
    /*
        当再出现一些针对非重复项的操作的时候,我们可以创建独立的方法来处理这些新的操作。
    */
    public void postEntries(List entries){
        List entriesToAdd = uniqueEntries(entries);
        for(Iterator it = entries.iterator(); it.hasNext();){
            Entry entry = (Entry) it.next();
            entry.postDate();
        }
        transactionBundle.getListManager().add(entriesToAdd);
    }
}

你可能感兴趣的:(提炼函数案例 一次循环中完成多个任务)