【设计模式】--NULL OBJECT 模式

来源:互联网 发布:淘宝优站排名 编辑:程序博客网 时间:2024/06/06 03:22


1 丑陋的代码:

  Employee e = DB.getEmployee("Tom");

  if(e!=null && e.isTimeToPay(today))//丑陋且容易出错

    e.pay();

2 一个优化的方法: DB.getEmployee 抛出一个异常 但是try/catch更加丑陋,而且要声明这些异常。


3 怎么办?看示例理解


public class DB {    public static Employee getEmployee(String name){        //即使失败时也能返回一个有效的对象        return Employee.NULL;    }}

实现方法:内部匿名类+接口

public interface Employee {    public boolean isTimeToPay(Date payDate);    public void pay();    /**     * 匿名内嵌类:确保该类只有一个单实例 其他人无法创建NULL的其他实例。     */    public static final Employee NULL = new Employee() {        @Override        public boolean isTimeToPay(Date payDate) {            return false;        }        @Override        public void pay() {        }    };}

好处: 1 都会返回有效实例 2 代码逻辑统一,一致性 3 匿名内部类的使用防止创建多个NULL实例

代价: 1 设计复杂 

原创粉丝点击