zoukankan      html  css  js  c++  java
  • 空对象模式

    1.空对象模式简介

    在空对象模式(Null Object Pattern)中,一个空对象取代对 NULL 对象实例的检查。Null 对象不是检查空值,而是变为返回一个不做任何动作
    的对象。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。
    在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将
    无缝地使用在需要检查空值的地方。

    2.测试Demo

    abstract class AbstractCustomer {
        protected String name;
        public abstract boolean isNull();
        public abstract String getName();
    }
    
    
    class RealCustomer extends AbstractCustomer {
        public RealCustomer(String name) {
            this.name = name;
        }
        public boolean isNull() {
            return false;
        }
        public String getName() {
            return name;
        }
    }
    
    class NullCustomer extends AbstractCustomer {
        public boolean isNull() {
            return true;
        }
        public String getName() {
            return "Couldn't get in database";
        }
    }
    
    class CustomerFactory {
        /* 必须加static后才能在static方法中使用,使用static修饰为常量也不行,这一点可能
         * 和C++不一样 */
        private static final String names[] = {"jone", "july", "marel", "koko", "kity"};
    
        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();
        }
    }
    
    public class NullPatternDemo {
        public static void main(String args[]) {
    
            AbstractCustomer c1 = CustomerFactory. getCustomer("koko");
            System.out.println(c1.getName());
    
            AbstractCustomer c2 = CustomerFactory. getCustomer("fuxi");
            System.out.println(c2.getName());
    
            AbstractCustomer c3 = CustomerFactory. getCustomer("jone");
            System.out.println(c3.getName());
        }
    }
    
    /*
    $ java NullPatternDemo 
    koko
    Couldn't get in database
    jone
    
    */

    参考:http://www.runoob.com/design-pattern/null-object-pattern.html

  • 相关阅读:
    C++ VC实现对话框窗口任意分割
    C++ 关于滚动条的滚动问题
    C++ 自定义控件的移植(将在其它程序中设计的自定义控件,移植到现在的系统中)
    C++ 动态创建按钮及 按钮的消息响应
    C++ Custom Control控件 向父窗体发送对应的消息
    C++ MFC 改变控件大小和位置
    C++ 使用VS2010创建MFC ActiveX工程项目
    VC++ 自定义控件的建立及使用方法
    C++ CTreeview的checkbox使用方法
    C++ vc中怎么使用SendMessage自定义消息函数
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10733299.html
Copyright © 2011-2022 走看看