디자인 최적화 - (3) 플라이급

  설명 : 플라이급 패턴이 디자인 패턴의 목표로 시스템 성능을 향상시킬 수있는 몇 가지 디자인 패턴 중 하나입니다. 그것의 핵심 아이디어는 다음과 같은 여러 개체가 시스템에 존재하는 경우, 당신은 단순히 공유 객체의 복사본을 생성하고, 모든 사용을위한 새로운 객체를 만들 필요가 없습니다.

  장점 :

  1) 오브젝트를 재 비용을 절약 할 수 동일한 개체가 유지 플라이 웨이트 패턴 번만 생성한다.

  2) 메모리 시스템을 감소시키기 때문에, 생성되는 객체의 수를 줄이고, GC 압력이 감소된다.

참여 1. 역할

  1) 플라이급 식물 : 구체적인 클래스 플라이급를 생성, 같은 객체를 유지 플라이급. 그것은 동일한 공유 요소 객체 시스템을 공유 할 수 있습니다 보장합니다. 그 후, 오브젝트 생성, 단일 실시 예에서, 요청 개체가 이미 존재하는 경우, 직접 대상물에 되돌아가없는 유사한 내부 모델 알고리즘을 사용한다.

  2) 추상 플라이급 : 객체 공유 서비스 인터페이스에 대한 정의.

  3) 특정 클래스는 플라이급 : 플라이급는 특정 로직을 수행하는 추상적 인 인터페이스를 구현합니다.

  . 4) 메인는 : 플라이급가 플라이급 플라이급를 획득 컴포넌트를 사용하여 식물을 통해 개체

 

2. 추상적 인 플라이급 

  IReportManager.java

패키지 com.hxc.Share을; 

/ ** 
 * <p> 설명 :抽象享元</ p> 
 * @author 황 Xiaocong 
 * @data 2019年10月日31 
 * / 
공용  인터페이스 IReportManager { 

    공개 문자열 createReport (); 
}

 

3. 플라이급 공장

   ReportManagerFactory.java

패키지 com.hxc.Share을; 

수입 java.util.HashMap에;
수입 java.util.Map; 

/ ** 
 * <P> 설명 :享元工厂</ P> 
 * @author 황 Xiaocong 
 * @data日年10月31 2019 
 * / 
공용  클래스 ReportManagerFactory { 

    개인 지도 <문자열, IReportManager> companyAReport =  의 HashMap <문자열, IReportManager> ();
    개인 지도 <문자열, IReportManager는> companyBReport는 = 새로운 <문자열, IReportManager>의 HashMap를 (); 
    
    공공 IReportManager getCompanyAReport (문자열 tenanId) { 
        IReportManager reportManager =companyAReport.get (tenanId);
        경우 (reportManager == ) { 
            reportManager는 = 새로운 CompanyAReport (tenanId); 
        } 
        반환 reportManager을; 
    } 
    
    공개 IReportManager getCompanyBReport (문자열 tenanId) { 
        IReportManager reportManager = companyBReport.get (tenanId);
        경우 (reportManager == ) { 
            reportManager는 = 새로운 CompanyBReport (tenanId); 
        } 
        반환 reportManager을; 
    } 
}

 

4. 상세한 클래스 플라이급

   CompanyAReport.java CompanyBReport.java

패키지 com.hxc.Share을;
/ ** 
 * <p> 설명 :具体享元은 </ p> 
 * @author 황 Xiaocong 
 * @data 2019年10月日31 
 * / 
공용  클래스 CompanyAReport의 구현 IReportManager { 

    개인 문자열 tenanId;
    공공 CompanyAReport (문자열 tenanId) {
          .tenanId = tenanId; 
    } 
    공공 문자열 createReport () {
         반환 "A 사 보고서를 만들"+ tenanId; 
    } 
}

 

패키지 com.hxc.Share을; 

/ ** 
 * <p> 설명 :具体享元B </ p> 
 * @author 황 Xiaocong 
 * @data 2019年10月日31 
 * / 
공용  클래스 CompanyBReport의 구현 IReportManager { 

    개인 문자열 tenanId;
    공공 CompanyBReport (문자열 tenanId) {
          .tenanId = tenanId; 
    } 
    공공 문자열 createReport () {
         반환 "회사 B의 보고서를 만들"+ tenanId; 
    } 
}

 

5.Main

 

패키지 com.hxc.Share을; 

공공  클래스 홈페이지 { 

    공공  정적  무효 메인 (문자열 []에 args) { 
        ReportManagerFactory 공장 = 새로운 ReportManagerFactory (); 
        IReportManager companyAReport = factory.getCompanyAReport ( "1101" ); 
        에서 System.out.println (companyAReport.createReport ()); 
        
        IReportManager companyBReport = factory.getCompanyBReport ( "B2222" ); 
        에서 System.out.println (companyBReport.createReport ()); 
    } 
}

 

추천

출처www.cnblogs.com/sun-flower1314/p/11767417.html