Latest web development tutorials

널 개체 모델

빈 객체 모델 (널 개체 패턴) 및 NULL 개체 인스턴스에 대한 빈 개체 대체 체크. 널 객체는 반응 어떤 행동의 관계를 null 값을 확인,하지만하지 않습니다. 데이터를 사용할 수없는 경우 이러한 널 객체는 기본 동작을 제공 할 수 있습니다.

빈 객체 모델, 우리는 추상 클래스의 지정된 엔티티를 생성하고 다양한 작업을 수행하기 위해 클래스를 확장 할뿐만 아니라, 클래스이 빈 객체 클래스 중 빈 객체 클래스를 완벽하게 구현하지 않았다 만들 장소에서의 사용은 null 값을 확인해야합니다.

실현

우리는 (이 경우에는, 고객의 이름) 사용자 지정 동작AbstractCustomer추상 클래스를 생성하고, 엔티티 클래스AbstractCustomer클래스를 확장 할 것이다. 고객에 따라CustomerFactory팩토리 클래스의 이름은 제공 또는RealCustomerNullCustomer 개체를 반환합니다.

NullPatternDemo,우리는 빈 객체 모델의 사용을 설명하기CustomerFactory 클래스의사용을 입증한다.

널 개체 패턴 UML 다이어그램

1 단계

추상 클래스를 만듭니다.

AbstractCustomer.java

공개 추상 클래스 AbstractCustomer {
   보호 된 문자열 이름;
   공공 추상 부울 isNil ();
   공공 추상적 인 문자열 getName ();
}

2 단계

클래스 위의 엔티티 클래스를 확장 만듭니다.

RealCustomer.java

공용 클래스 RealCustomer는 AbstractCustomer를 {확장

   공공 RealCustomer (문자열 이름) {
      this.name = 이름;		
   }
   
   @Override
   공공 문자열 getName () {
      이름을 반환;
   }
   
   @Override
   공공 부울 isNil () {
      false를 반환;
   }
}

NullCustomer.java

공용 클래스 NullCustomer는 AbstractCustomer를 {확장

   @Override
   공공 문자열 getName () {
      "고객 데이터베이스에서 사용할 수 없음"반환;
   }

   @Override
   공공 부울 isNil () {
      true를 반환;
   }
}

3 단계

CustomerFactory클래스를 만듭니다.

CustomerFactory.java

공용 클래스 CustomerFactory {
	
   공공 정적 최종 문자열 [] 이름 = { "롭", "조", "줄리"};

   공공 정적 AbstractCustomer getCustomer (문자열 이름) {
      대한 (INT 전 = 0; i가 names.length를 <; 내가 ++) {
         경우 (이름 [i]를 .equalsIgnoreCase (이름)) {
            새로운 RealCustomer (이름)을 반환;
         }
      }
      ) (새 NullCustomer를 반환;
   }
}

4 단계

RealCustomer또는NullCustomer개체를 가져 전달하는 클라이언트의 이름을 기준으로CustomerFactory을 사용합니다.

NullPatternDemo.java

공용 클래스 NullPatternDemo {
   공공 정적 무효 메인 (문자열 []에 args) {

      AbstractCustomer 1 고객 = CustomerFactory.getCustomer ( "약탈");
      AbstractCustomer customer2 = CustomerFactory.getCustomer ( "밥");
      AbstractCustomer customer3 = CustomerFactory.getCustomer ( "줄리");
      AbstractCustomer customer4 = CustomerFactory.getCustomer ( "로라");

      에서 System.out.println ( "고객");
      에서 System.out.println (customer1.getName ());
      에서 System.out.println (customer2.getName ());
      에서 System.out.println (customer3.getName ());
      에서 System.out.println (customer4.getName ());
   }
}

5 단계

출력을 확인합니다.

고객
롭
고객 데이터베이스에 사용할 수 없음
줄리
고객 데이터베이스에 사용할 수 없음