빈 객체 패턴


Null 개체 패턴에서는 Null 개체가 NULL 개체 인스턴스 확인을 대체합니다. Null 개체는 null 값을 확인하는 대신 아무 작업도 수행하지 않는 관계를 반영합니다. 이러한 Null 개체는 데이터를 사용할 수 없을 때 기본 동작을 제공할 수도 있습니다.

빈 객체 패턴에서는 수행할 다양한 작업을 지정하는 추상 클래스와 클래스를 확장하는 엔터티 클래스를 만듭니다. 또한 이 클래스의 구현을 구현하지 않는 빈 객체 클래스도 만듭니다. Null 값을 확인해야 할 때마다 사용하십시오.

Implementation

작업(이 경우 고객 이름)을 정의하는 AbstractCustomer 추상 클래스와 AbstractCustomer 클래스를 확장하는 엔터티 클래스를 만듭니다. 팩토리 클래스 CustomerFactory는 고객이 전달한 이름을 기반으로 RealCustomer 또는 NullCustomer 개체를 반환합니다.

NullPatternDemo, 데모 클래스에서는 CustomerFactory를 사용하여 null 개체 패턴의 사용을 보여줍니다.

null_pattern_uml_diagram.jpg

1단계

추상 클래스를 만듭니다.

AbstractCustomer.java

public abstract class AbstractCustomer {
   protected String name;
   public abstract boolean isNil();
   public abstract String getName();
}

2단계

위 클래스를 확장하는 엔터티 클래스를 만듭니다.

RealCustomer.java

public class RealCustomer extends AbstractCustomer {

   public RealCustomer(String name) {
      this.name = name;		
   }
   
   @Override
   public String getName() {
      return name;
   }
   
   @Override
   public boolean isNil() {
      return false;
   }
}

NullCustomer.java

public class NullCustomer extends AbstractCustomer {

   @Override
   public String getName() {
      return "Not Available in Customer Database";
   }

   @Override
   public boolean isNil() {
      return true;
   }
}

3단계

CustomerFactory 클래스를 만듭니다.

CustomerFactory.java

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();
   }
}

4단계

CustomerFactory를 사용하여 고객이 전달한 이름을 기반으로 RealCustomer 또는 NullCustomer 개체를 가져옵니다.

NullPatternDemo.java

public class NullPatternDemo {
   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());
   }
}

5단계

출력을 확인합니다.

rreee