우아한 프로그래밍의 이런 사용 대상은 네가 정상이다(32)

활짝 웃다


[네 살짜리 소년이 세 살짜리 소녀에게 뽀뽀를 했다! 소녀는 소년에게 말했다. "당신이 뽀뽀를 하면 나한테 책임을 져야지."남자는 성숙하게 여자의 어깨를 두드리며 웃으며 말했다. "안심해. 나 네 살인데 한두 살짜리 애도 아니야."

질문 제기**


프로젝트에서 대상을 어떻게 사용합니까??

문제를 해결하다


구조기 대신 정적 공장 방법을 고려
예:
public static Boolean valueOf(boolean b) {
    return (b ? Boolean.TRUE : Boolean.FALSE);
}

정적 접근 방식과 아키텍처의 이점:
  • 정적 방법은 이름이 있고 구조기가 없습니다. 하나의 클래스는 지정된 서명이 있는 구조기만 있을 수 있습니다.2개가 필요한 경우 매개변수 목록은 매개변수 유형의 순서만 다릅니다.이것은 결코 좋은 생각이 아니다.
  • 정적 방법은 호출할 때마다 새로운 대상을 만들 필요가 없다.
  • 정적 방법은 원래 되돌아오는 형식의 하위 형식의 대상을 되돌릴 수 있다.예를 들어 자바 콜렉션의 집합 인터페이스는 32개의 편리한 실현이 있고 각각의 편리한 실현은 하나의 종류에 대응한다.
  • 정적 방법은 매개 변수화 유형의 실례를 만들 때 코드를 더욱 간결하게 만든다.Map

  • 여러 개의 구조기 파라미터를 만났을 때 구조기를 고려해야 한다
    중첩 구조기 모드: 첫 번째 구조기는 필요한 매개 변수만 있고 두 번째는 선택할 수 있는 매개 변수가 있으며 세 번째는 두 개가 있다. 이런 식으로 추론하면 마지막 구조기는 선택할 수 있는 모든 매개 변수가 있다.실례를 만들 때 가장 짧은 목록 파라미터를 선택하는 구조기는 많은 파라미터가 있을 때 클라이언트 코드를 작성하기 어렵다
    참조 고수 기사:http://macrochen.iteye.com/blog/1113031
    해결 방법: 빌더를 사용합니다.
    public Class A{  
        private int a;  
        private int b;  
        private int c;  
        private int d;  
        public static class Builder{  
            //  
            private final int a;  
            private final int b;  
            // 
            private int c;  
            private int d;  
    
            public Builder(int a, int b){  
                this.a=a;  
                this.b=b;  
            }  
    
            public Builder setC(int c){  
                this.c = c; 
                // , , ,  
                return this;  
            }  
    
            public Builder setD(int d){  
                this.d=d;  
                return this;  
            }  
    
            public A build(){  
                return new A(this);  
            }  
    
            private A(Builder builder){  
                a = builder.a;  
                b = builder.b;  
                c = builder.c;  
                d = builder.d;  
            }  
    }  
     :  
    A a = new A.Builder(1, 2).setC(3).setD(4).build();  
    

    요약:
    클래스 구조기나 정적 공장에 여러 개의 파라미터가 있다면 이런 종류를 설계할 때 Builder 모드는 좋은 선택이다.특히 대부분의 매개 변수가 선택할 수 있을 때.Builder 모드를 사용하는 클라이언트는 기존의 중재 구조기 모드를 사용하는 것보다 읽기와 쓰기가 더 쉽습니다.
    개인 구조기나 매거 유형으로singleton 속성을 강화합니다
    Singleton은 한 번 실례화된 종류를 가리킨다.
    참조 고수 기사:http://www.cnblogs.com/rilley/archive/2012/10/24/2737597.html
    예:
    // , 
    // 
    public class Elvis {
      public static final Elvis INSTANCE = new Elvis();
      private Elvis {}
    }
    

    참조 고수 기사:http://blog.csdn.net/huangyuan_xuan/article/details/52193006
     :
    
    public class Elvis {
      private staic final Elvis INSTANCE = new Envis();
      private Elvis() {}
      private static Elvis getInstance() { 
            // , 
            return INSTANCE; 
        }
    }
    
     :
    
    public enum Elvis{ 
        INSTANCE; 
        public void invoke(){...} 
    } 
    

    참조 고수 기사:http://callmegod.iteye.com/blog/1474441
    public enum MaYun {
        himself; // , MaYun 
        private String anotherField;
        MaYun() {
            //MaYun 
            // 。 instance :
            /** himself = MaYun() {
            * //MaYun 
            * }
            **/
        }
    
        public void splitAlipay() {
            System.out.println(“Alipay ! Yahoo 。。。”);
        }
    }
    Call:MaYun.himself.splitAlipay();
    
     Singleton 。
    

    매거진: 좋습니다. 다중 루틴 동기화 문제를 피할 수 있을 뿐만 아니라, 새로운 대상을 반서열화하는 것도 방지할 수 있습니다.하지만 클래스의 일부 특성을 잃어 로드가 지연되지 않아 사용하는 사람이 너무 적다~
    앞으로 단일 요소를 많이 보급하고 이런 더 좋은 단일 실현 방식을 매거해야 한다.프로젝트의 코드를 수정하고 실시하기 시작하다.
    사유 구조기를 통해 실례화할 수 없는 능력을 강화하다
    ->정적 방법과 필드만 있는 클래스는 기본 유형의 값이나 데이터 유형에 관한 방법을 조직하는 데 주로 사용된다(Math, Arrays). Collections 방법을 통해 특정 인터페이스를 실현하는 대상의 놀라운 방법을 조직할 수 있다. 이런 종류를 이용하여final 클래스의 방법을 조직하여 확장하는 방법을 대체할 수 있다.
    ->이 도구류는 실례화되기를 원하지 않습니다. 실례화는 그에게 아무런 의미가 없습니다.그리고 만약에 우리가 구조기를 제공하지 않는다면 jvm는 스스로 제공할 것이다. 그러면 실례화될 것이다. 그러면 우리는 클래스에 개인적인 구조기만 제공하면 되고 주석 설명을 추가할 수 있다.이렇게 가져오는 문제는 자류화할 수 없다는 것이다. 왜냐하면 자류는 슈퍼 부류의 구조 함수를 요구하기 때문이다.
    불필요한 객체 작성 방지
    일반적으로 대상을 다시 사용하는 것이 가장 좋다. 필요할 때마다 같은 기능을 가진 대상을 만드는 것이 아니라, 대상이 변할 수 없다면, 그는 시종 다시 사용할 수 있다.
    예를 들어//'ay &al'자체가 하나의 대상이다. 이렇게 쓰면 빈번하게 호출되면 수천 수만의 불필요한 String 실례Strings = new String('ay &al')을 초래할 수 있다.
    개진
    String s = "al & ay";
    

    동시에 제공되는 정적 공장 방법과 구조기의 불변류는 구조기가 아닌 정적 공장 방법을 사용하여 불필요한 대상을 만들 수 있다.
    예컨대
    Boolean.valueOf(String)
    

    ... 보다 우수하다
    Boolean(String)
    

    컨테이너 기본 유형이 아닌 기본 유형을 우선적으로 사용하려면 무의식적으로 자동 컨테이너를 조심해야 한다.
    예컨대
    public static void main(String[] args){
        Long sum = 0L;
        for(long i=0;i<Integer.MAX_VALUE;i++){
            sum + = i;// 
        }
        System.out.println(sum);
    }
    

    만료된 객체 참조 제거
    인용 대상을 비우는 것은 일종의 예외이지 규범적인 행위가 아니다
    다음 세 가지 시나리오에서는 메모리 유출을 고려해야 합니다.
  • 클래스 자체 메모리 관리 요청
  • 캐시, 예를 들어 WeakHashMap은 외부에서 인용되지 않은 캐시 항목을 자동으로 처리할 수 있습니다.일반적으로 백엔드 스레드를 이용하여 정해진 시간에 청소를 할 수도 있고, 링크드 HashMap에서removeEldest Entry를 사용하여 항목을 추가할 때 청소를 할 수도 있습니다.복잡한 캐시에 대해java를 직접 사용해야 합니다.lang.ref
  • 감청기와 다른 리셋, 리셋은 이때 약한 인용으로 할 수 있다.

  • 클래스가 스스로 메모리를 관리한다면 프로그래머는 메모리 유출 문제를 경계해야 한다.

    책을 읽고 깨닫다.


    잭 케루아크에서 온'그 길에서'
  • 진정한 영혼은 정말로 무엇을 따지지 않는다. 왜냐하면 그들의 마음속 깊은 곳에 국왕 같은 자부심이 있기 때문이다.
  • 나는 아직 젊다. 나는 길을 가기를 갈망한다.최초의 열정을 가지고 최초의 꿈을 좇으며 최초의 체험을 느끼며 출발합시다.
  • 길에서 우리는 영원히 젊고 영원히 뜨거운 눈물을 흘린다.
  • 우리는 아직 더 긴 길을 가야 하지만 괜찮아, 길은 삶이야.
  • "나는 평생 나를 흥미롭게 하는 사람을 따라다니는 것을 좋아한다. 왜냐하면 내 마음속에 진정한 사람은 모두 미치광이이기 때문이다. 그들은 생활을 좋아하고 수다를 떨며 예기를 드러내지 않고 모든 것을 가지기를 바란다. 그들은 피곤하지 않고 평범한 것을 말하지 않고 기묘한 노란색 로마 불꽃처럼 끊임없이 불꽃을 뿜는다
  • .

    기타


    만약 당신에게 작은 즐거움을 가져다 준다면, 즐거움을 계속 전달하게 할 것입니다. 전재, 좋아요, 최고, 귀중한 의견을 남기신 것을 환영합니다. 지지해 주셔서 감사합니다!

    좋은 웹페이지 즐겨찾기