JAva 23種設計モード-22-java空オブジェクトモード(Null Object Pattern)


目次
  • ディレクトリ
  • 空オブジェクトモード
  • 実例
  • 定義
  • テスト
  • 実装形態
  • UML & Code
  • UML
  • Code

  • シリーズナビゲーション
  • 空のオブジェクトモード
    Nullオブジェクトモード(Null Object Pattern)では、NULLオブジェクトインスタンスのチェックの代わりに空のオブジェクトが使用されます.Nullオブジェクトは空の値をチェックするのではなく、何もしない関係を反映します.このようなNullオブジェクトは、データが使用できない場合にデフォルトの動作を提供することもできます.
    空のオブジェクト・モードでは、実行するさまざまな操作を指定する抽象クラスと、クラスを拡張するエンティティ・クラスを作成します.また、空の値をチェックする必要がある場所でシームレスに使用される、クラスに実装されていない空のオブジェクト・クラスも作成します.
    実例
    クラス情報の概要:
    クラス名
    説明
    Main.java
    メソッドの総入口
    RealConsumer.java
    実際の顧客
    ConsumerFactory.java
    顧客工場
    NullConsumer.java
    空の客
    AbstractConsumer.java
    抽象顧客
    定義#テイギ#
  • RealConsumer.java
  • package com.ryo.design.pattern.note.nullObject;
    
    /**
     * Created by bbhou on 2017/8/17.
     */
    public class RealConsumer extends AbstractConsumer {
    
        public RealConsumer(String name) {
            this.name = name;
        }
    
        @Override
        public boolean isNull() {
            return false;
        }
    
        @Override
        public String getName() {
            return this.name;
        }
    }
    
  • ConsumerFactory.java
  • package com.ryo.design.pattern.note.nullObject;
    
    import java.util.Arrays;
    import java.util.List;
    
    /**
     * Created by bbhou on 2017/8/17.
     */
    public class ConsumerFactory {
    
        private static List nameList = Arrays.asList("hello", "world", "ryo");
    
        public static AbstractConsumer getConsumer(String name) {
            if(nameList.contains(name)) {
                return new RealConsumer(name);
            }
            return new NullConsumer();
        }
    
    }
    
  • NullConsumer.java
  • package com.ryo.design.pattern.note.nullObject;
    
    /**
     * Created by bbhou on 2017/8/17.
     */
    public class NullConsumer extends AbstractConsumer {
    
        @Override
        public boolean isNull() {
            return true;
        }
    
        @Override
        public String getName() {
            return "Not an available name!";
        }
    }
    
  • AbstractConsumer.java
  • package com.ryo.design.pattern.note.nullObject;
    
    /**
     * Created by bbhou on 2017/8/17.
     */
    public abstract class AbstractConsumer {
    
        /**
         *     
         */
        protected String name;
    
        /**
         *     
         * @return
         */
        public abstract boolean isNull();
    
        /**
         *     
         * @return
         */
        public abstract String getName();
    
    }
    

    テスト
  • Main.java
  • /*
     * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     * Copyright (c) 2012-2018. houbinbini Inc.
     * design-pattern All rights reserved.
     */
    
    package com.ryo.design.pattern.note.nullObject;
    
    /**
     * 

    * *
     Created: 2018/5/24   10:02  
    *
     Project: design-pattern  
    *
    * @author houbinbin
    * @version 1.0
    * @since JDK 1.7
    */
    public class Main {
    public static void main(String[] args) {
    AbstractConsumer customer1 = ConsumerFactory.getConsumer("hello");
    AbstractConsumer customer2 = ConsumerFactory.getConsumer("world");
    AbstractConsumer customer3 = ConsumerFactory.getConsumer("ryo");
    AbstractConsumer customer4 = ConsumerFactory.getConsumer("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());
    }
    }
  • Customers
    hello
    world
    ryo
    Not an available name!

    インプリメンテーションモード
    UML & Code
    UML
    UMLは のように する
    Code
    コードアドレス
    のオブジェクトモード
    シリーズナビゲーション
    シリーズナビゲーション