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