设计模式学习—空对象模式(Null Object Design Pattern)

来源:互联网 发布:qq炫舞卡八音软件 编辑:程序博客网 时间:2024/06/12 14:06

一、我的理解


空对象模式类似于给某个类设置默认行为,以应对当该对象为null值时有默认操作,避免程序报错。

二、实现方式


对象的生成采用工厂模式,工厂模式内部在创建对象实例时检查参数,如果参数可用则创建对应实例对象,否则创建一个空对象类(实际上是默认类的对象实例)

三、实例



Java实例

AbstractCustomer类:抽象客户类,工厂模式中会用到

package com.study.dp.nullobject;public abstract class AbstractCustomer {    protected String name;    public abstract boolean isNil();    public abstract String getName();    }
RealCustomer类:真实的客户类,针对实际存在的客户会有相应的动作(这里为getName函数)

package com.study.dp.nullobject;public class RealCustomer extends AbstractCustomer {    public RealCustomer(String name) {        this.name = name;    }        @Override    public boolean isNil() {        return false;    }    @Override    public String getName() {        return name;    }}

NullCustomer类:空对象类,即如果客户不存在时生成的实例所属类

package com.study.dp.nullobject;public class NullCustomer extends AbstractCustomer {    @Override    public boolean isNil() {        return true;    }    @Override    public String getName() {        return "Not Available in Customer Database";    }}
CustomerFactory类:工厂模式,在生成实例对象时会检查客户姓名是否可用,如果不可用则返回空对象

package com.study.dp.nullobject;public class CustomerFactory {        public static final String[] names = {"Rob", "Joe", "Julie"};        public static AbstractCustomer getCustomer(String name) {        for(int i=0; i<names.length; i++) {            if(names[i].equalsIgnoreCase(name)) {                return new RealCustomer(name);            }        }        return new NullCustomer();    }}
Demo类:测试

package com.study.dp.nullobject;public class Demo {        public static void main(String[] args) {        AbstractCustomer customer1 = CustomerFactory.getCustomer("Rob");        AbstractCustomer customer2 = CustomerFactory.getCustomer("Bob");        AbstractCustomer customer3 = CustomerFactory.getCustomer("Julie");        AbstractCustomer customer4 = CustomerFactory.getCustomer("Laura");                System.out.println("Customers");        System.out.println(customer1.getName());        System.out.println(customer2.getName());        System.out.println(customer3.getName());        System.out.println(customer4.getName());    }}

四、应用场景



阅读全文
0 0
原创粉丝点击