?
Employee e = DB.getEmployee("Bob"); //判斷雇員e是否應(yīng)該今天發(fā)薪水,如果是,則發(fā) if(e != null && e.isTimeToPay(today)) e.pay();
?
? 如果Bob對象不存在,e就是一個null,然后&&的第一個表達式會被首先求值,而僅當?shù)谝粋€表達式為true時才會對第二個表達式求值。而在很多情況下我們會忘 了對null進行檢查判定。這種慣用方法雖然常見,但很丑陋。
通過用DB拋出一個異常而不是返回null可以減少出錯的可能。不過try/catch塊更加丑陋,所以我們可以用Null Object模式來解決這個問題。
?
?
Employee e = DB.getEmployee("Bob"); //判斷雇員e是否應(yīng)該今天發(fā)薪水,如果是,則發(fā) if(e.isTimeToPay(today)) e.pay();?
?
?
public class DB{ public static Employee getEmployee(String name){ Emplyee e = Sql.get(name);//從數(shù)據(jù)庫中得到該name的對象 if(e == null) return Employee.NULL; return e; } }
?
?
?
public interface Employee{ public void pay(); public boolean isTimeToPay(Date payDate); public static final Employee NULL = new Employee(){ public boolean isTimeToPay(Date payDate){ return false; } public void pay(){ } } }
? 使用無效的雇員類成為一個匿名內(nèi)部內(nèi)是一個確保該類只有單一實例的方法。實際上并不存在NullEmployee類本身。其他任何人都無法創(chuàng)建無效雇員類的其他實例。
如果可以創(chuàng)建無效雇員類的多個實例,那么這種表達方式是不可靠的。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
