JAVA 객체 작성 및 제거 방법

객체를 작성하는 몇 가지 방법
  • 구조기
  • 정적 공장 방법
  • Builder
  • 를 통해
    정적 공장 방법의 장점
  • 이름 있음 - 보다 명확하게 호출
  • 호출할 때마다 새 대상이 생성되지 않습니다
  • 원래 반환 유형의 하위 유형 객체
  • 를 반환할 수 있습니다.
  • 매개 변수화 유형의 실례를 만들 때 코드를 더욱 간결하게 한다
  • 정적 공장 방법의 단점
  • 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음
  • 다른 정적 방법과 사실상 아무런 차이가 없음
  • 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다
    중첩 구조기 모드
    그러나 많은 파라미터가 있을 때 클라이언트 코드는 작성하기 어렵고 읽기 어렵다.
    JavaBeans 모드.
    무참구조기를 호출하여 대상을 만들고, setter 방법을 호출하여 파라미터를 설정합니다.
    단점: 구조 과정이 몇 개의 호출로 나뉘어 불일치 상태에 빠질 수 있다.
    Builder 모드
    클라이언트가 모든 필요한 매개 변수를 이용하여 구조기/정적 공장을 호출하여builder 대상을 얻고 setter 방법과 유사하게 호출하며 마지막에 무참한build 방법을 호출하여 변하지 않는 대상을 생성합니다.
    
    public class NutritionFacts { 
      private final int servingSize; 
      private final int servings; 
      private final int calories; 
      private final int fat; 
      private final int sodium; 
      private final int carbohydrate; 
     
      public static class Builder { 
        //Required parameters 
        private final int servingSize; 
        private final int servings; 
     
        //Optional parameters - initialized to default values 
        private int calories   = 0; 
        private int fat     = 0; 
        private int carbohydrate = 0; 
        private int sodium    = 0; 
     
     
        public Builder(int servingSize, int servings) { 
          this.servingSize = servingSize; 
          this.servings = servings; 
        } 
     
        public Builder calories(int val){ 
          calories = val; return this; 
        } 
        public Builder fat(int val){ 
          fat = val; return this; 
        } 
        public Builder carbohydrate(int val){ 
          carbohydrate = val; return this; 
        } 
        public Builder sodium(int val){ 
          sodium = val; return this; 
        } 
     
        public NutritionFacts build(){ 
          return new NutritionFacts(this); 
        } 
      } 
     
      private NutritionFacts(Builder builder) { 
        servings   = builder.servings; 
        servingSize = builder.servingSize; 
        calories   = builder.calories; 
        fat     = builder.fat; 
        sodium    = builder.sodium; 
        carbohydrate = builder.carbohydrate; 
      } 
    } 
     
    //Client 
    NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8). 
      calories(100).sodium(35).carbohydrate(27).build(); 
    
    
    builder는 제약 조건을 검사할 수 있고 여러 개의 변수가 있을 수 있습니다.
    그러나 Builder 모드는 더 지루하고 많은 매개변수(>=4)에서만 사용됩니다.
    개인 구조기나 매거 유형으로 Singleton 속성 강화
    단일 요소의 매거 유형은 이미 Singleton을 실현하는 가장 좋은 방법이 되었다.
    
    public enum Elvis { 
      INSTANCE; 
     
      public void leaveTheBuilding() {...} 
    } 
    이런 방식은 서열화 메커니즘을 제공했고 여러 차례의 실례화를 방지할 수 있다.
    사유 구조기를 통해 실례화할 수 없는 능력을 강화하다
    실례화되지 않기 위해 사유 구조기를 사용하여 실현할 수 있다.
    
    //Noninstantiable utility class 
    public class UtilityClass { 
      private UtilityClass() { 
        throw new AssertionError(); 
      } 
     
      ... // Remainder omitted 
    } 
    이런 방식은 한 종류를 이불로 분류할 수 없게 한다.
    모든 구조기는 반드시 현식이나 은식으로 초유형 구조기를 호출해야 한다. 이런 상황에서 서브클래스는 접근할 수 있는 초유형 구조기 호출이 없다.
    불필요한 객체 만들기 방지
    변경할 수 없는 객체를 다시 사용하고 수정되지 않을 것으로 알려진 변경할 수 없는 객체를 다시 사용합니다.
    정적 공장 방법과 구조기를 동시에 제공하는 불변류는 일반적으로 정적 공장 방법을 사용하여 불필요한 대상을 만들지 않도록 할 수 있다.구조기는 호출될 때마다 새 대상을 만듭니다.
    자동 포장 (autoboxing) C에서 여분의 대상을 만드는 새로운 방법입니다.포장 기본 형식이 아니라 기본 형식을 우선적으로 사용해야 합니다.
    만료된 객체 호출 제거
    클래스가 메모리를 스스로 관리하는 것이라면 메모리 유출 문제를 경계해야 한다.원소가 방출되면 원소에 포함된 모든 대상 인용은 비워야 합니다.
    흔히 볼 수 있는 메모리 유출은 캐시, 감청기, 기타 리셋이다.
    즉시 쓰레기 회수로 전환되는 것을 확보하는 가장 좋은 방법은 그것들의 약한 인용만 보존하는 것이다.
    종료 방법 사용 안 함
    종결 방법의 단점은 제때에 집행될 것을 보장할 수 없다는 데 있다.
    종결 방법에 의존해서 중요한 지속 상태를 갱신해서는 안 된다.
    현식의 종지 방법은 통상적으로try-finally 구조와 결합하여 사용하여 제때에 종지를 확보한다.
    중지 방법의 용도
  • 대상 소유자가 현식 종료 방법 호출을 잊어버렸을 때, 종료 방법은'안전망'C 종료 방법으로 충당할 수 있으며, 자원이 아직 종료되지 않은 것을 발견하면 로그에 경고를 기록해야 한다.
  • 중요하지 않은 로컬 리소스를 종료합니다.
  • 종결 방법을 사용하면 슈퍼를 호출하는 것을 기억해야 한다.finalize .
    이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

    좋은 웹페이지 즐겨찾기