JAva 23種設計モード-22-java空オブジェクトモード(Null Object Pattern)
6659 ワード
目次ディレクトリ 空オブジェクトモード 実例 定義 テスト 実装形態 UML & Code UML Code
シリーズナビゲーション 空のオブジェクトモード
Nullオブジェクトモード(Null Object Pattern)では、NULLオブジェクトインスタンスのチェックの代わりに空のオブジェクトが使用されます.Nullオブジェクトは空の値をチェックするのではなく、何もしない関係を反映します.このようなNullオブジェクトは、データが使用できない場合にデフォルトの動作を提供することもできます.
空のオブジェクト・モードでは、実行するさまざまな操作を指定する抽象クラスと、クラスを拡張するエンティティ・クラスを作成します.また、空の値をチェックする必要がある場所でシームレスに使用される、クラスに実装されていない空のオブジェクト・クラスも作成します.
実例
クラス情報の概要:
クラス名
説明
Main.java
メソッドの総入口
RealConsumer.java
実際の顧客
ConsumerFactory.java
顧客工場
NullConsumer.java
空の客
AbstractConsumer.java
抽象顧客
定義#テイギ# RealConsumer.java ConsumerFactory.java NullConsumer.java AbstractConsumer.java
テスト Main.java
Nullオブジェクトモード(Null Object Pattern)では、NULLオブジェクトインスタンスのチェックの代わりに空のオブジェクトが使用されます.Nullオブジェクトは空の値をチェックするのではなく、何もしない関係を反映します.このようなNullオブジェクトは、データが使用できない場合にデフォルトの動作を提供することもできます.
空のオブジェクト・モードでは、実行するさまざまな操作を指定する抽象クラスと、クラスを拡張するエンティティ・クラスを作成します.また、空の値をチェックする必要がある場所でシームレスに使用される、クラスに実装されていない空のオブジェクト・クラスも作成します.
実例
クラス情報の概要:
クラス名
説明
Main.java
メソッドの総入口
RealConsumer.java
実際の顧客
ConsumerFactory.java
顧客工場
NullConsumer.java
空の客
AbstractConsumer.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;
}
}
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();
}
}
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!";
}
}
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();
}
テスト
/*
* 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
コードアドレス
のオブジェクトモード
シリーズナビゲーション
シリーズナビゲーション