zoukankan      html  css  js  c++  java
  • 【设计模式

    1、模式简介

      在空对象模式中,一个空对象取代NULL对象的实例的检查。NULL对象不是检查空值,而是反映一个不做任何动作的关系。这样的NULL对象也可以在数据不可用的时候提供默认的行为。

      在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。

      空对象模式一般和策略模式或工厂模式结合使用。

    2、案例

      在这个例子中,我们使用工厂,根据姓名初始化用户,如果姓名在要求范围内,则生成一个用户,否则生成一个空对象的用户。具体代码如下:

      用户抽象父类User中的代码:

    public abstract class User {
        protected String name;
    
        public User(String name) {
            this.name = name;
        }
    
        public abstract void introduce();
    }

      真实用户类RealUser中的代码:

    public class RealUser extends User {
    
        public RealUser(String name) {
            super(name);
        }
    
        @Override
        public void introduce() {
            System.out.println("My Name Is " + super.name);
        }
    }

      空用户类NullUser中的代码:

    public class NullUser extends User {
    
        public NullUser(String name) {
            super(name);
        }
    
        @Override
        public void introduce() {
            System.out.println("I am a NULL Object!!!!");
        }
    }

      用户工厂类UserFactory中的代码如下:

    public class UserFactory {
        private static final String[] NAME_LIMIT = { "Jack", "Rose", "Tom" };
    
        private static UserFactory instance;
    
        private UserFactory() {
        }
    
        public static UserFactory getInstance() {
            if (instance == null) {
                synchronized (UserFactory.class) {
                    if (instance == null) {
                        instance = new UserFactory();
                    }
                }
            }
            return instance;
        }
    
        public User getUserByName(String name) {
            User user = new NullUser(name);
            for (String n : NAME_LIMIT) {
                if (n.equals(name)) {
                    user = new RealUser(name);
                }
            }
            return user;
        }
    }

      测试类Test中的代码:

    public class Test {
        public static void main(String[] args) {
            User user1 = UserFactory.getInstance().getUserByName("Jack");
            user1.introduce();
    
            User user2 = UserFactory.getInstance().getUserByName("Rose");
            user2.introduce();
    
            User user3 = UserFactory.getInstance().getUserByName("Tom");
            user3.introduce();
    
            User user4 = UserFactory.getInstance().getUserByName("Jerry");
            user4.introduce();
        }
    }

      运行结果如下图所示:



      下面贴出空对象模式代码的GitHub地址:【GitHub - Null Object】

  • 相关阅读:
    段错误诊断!
    kissthank
    c实现面向对象编程(3)
    字符串转换成数字以及注意事项
    【Java并发编程实战】-----“J.U.C”:CLH队列锁
    c编程:僵尸吃大脑
    展示C代码覆盖率的gcovr工具简单介绍及相关命令使用演示样例
    最优化学习笔记(三)最速下降法
    maven学习
    ASP.NET MVC 入门4、Controller与Action
  • 原文地址:https://www.cnblogs.com/itgungnir/p/6211221.html
Copyright © 2011-2022 走看看