2012-07-29 5 views
7

자바 디자인 패턴을 거치며 약간의 의문/질문 프로토 타입 디자인 패턴이 있습니다. 먼저 내가 이해 한 것을 말하게하십시오. 프로토 타입 디자인 패턴은 객체 생성에 사용됩니다. 은 메모리 또는 리소스 측면에서 많은 비용이 듭니다. 그래서이 경우 이미 사용 가능한 객체의 복제본을 사용합니다. 그래서 새로운 객체와 clone()을 만드는 것의 차이점은 무엇입니까? 객체 저장소는 메모리에 어디에 저장됩니까?자바 프로토 타입 디자인 패턴 객체 생성

+0

이 당신에게 도움이 될 수 http://stackoverflow.com/questions/663079/does-cloning-provide-a-performance-improvement-over-constructors-factory-methods –

답변

3

프로토 타입 디자인 패턴은 시간 절약과 공간 절약이라는 두 가지 비용 절감 효과를 제공합니다. 파일, 데이터베이스 또는 네트워크를 통해 구성 데이터를 요청, 말 - 객체를 생성하는 보조 정보에 대한 비용이 많이 드는 액세스를 필요로 할 때

시간 절감 상황에서 온다. 예를 들어 웹 서버에 저장된 템플릿에서 많은 페이지를 작성하는 경우 템플릿을 한 번 읽은 다음 복제하여 각 새 페이지의 시작 지점을 얻는 것이 비용이 적게 듭니다. 각 페이지.

메모리 절감 불변의 객체를 재사용에서 오는 : 원래 문자열을 많이 포함되어있는 경우, 완전히 새로운 불변의 문자열을 만들거나 문자열을 수동으로 인턴을 처리하는 중 필요 새로운 인스턴스를 생성. 프로토 타입 패턴을 사용하면 클론이 템플릿의 불변 부분을 공유하도록함으로써이 문제를 피할 수 있습니다.

4

Java clone() 메소드는 새로운 객체를 생성하고 멤버 변수 값을 복사합니다. 일반적으로 새로운 객체를 만드는 것보다 비용이 적지도 적지 않습니다. clone()new을 사용하여 객체를 만드는 것보다 저렴할 수 있습니다. 객체의 생성자가 비용이 많이 드는 경우 일 수 있습니다. 예를 들어 생성자가 인수를 가져 와서 데이터베이스 쿼리의 일부로 사용하면 어떻게됩니까? 이 경우 clone()을 사용하면 비용이 많이 드는 쿼리 작업이 발생하지 않으므로 비용이 적게 듭니다.

이 디자인 패턴을 사용하는 데는 다른 이유가 있습니다. 주로 객체가 생성자에서 편리하게 수행 할 수없는 복잡한 설정이 필요할 때가 있습니다. 객체에 20 개의 속성이 필요하다고 가정 해보십시오. 생성자 매개 변수를 사용하여 매개 변수를 설정하면 해당 생성자는 끔찍하게 못 생깁니다. 20 개의 매개 변수가있는 생성자를 상상해보십시오! 대신 매개 변수가없는 객체를 만들 수 있고 mutator 메서드를 사용하여 20 개의 값을 설정 한 다음 clone() 객체를 사용하여 필요할 때 기성 복사본을 만들 수 있습니다. clone()에는 매개 변수가 전혀 필요하지 않으므로 분명히보기가 어렵습니다. 이 객체의 여러 버전을 여러 번 복사해야하는 경우 프로토 타입 패턴이 매력적입니다.