prototype 패턴 예제

당신의 튜토리얼은 정말 훌륭하고 이해하기 쉽습니다. 프로토타입 패턴을 실시간으로 어디에서 사용할 수 있는지 궁금했습니다. 시스템이 제품을 만들고, 구성하고, 표현하는 방식과 독립해야 하는 경우 및 인스턴스화할 클래스가 런타임에 지정되는 경우입니다. 예를 들어, 1) 동적 로딩 또는 제품의 클래스 계층 구조를 평행하는 공장의 클래스 계층 구조를 구축하지 않으려면 또는 산업 프로토 타입이 실제로 자신을 복사하지 않기 때문에 패턴에 훨씬 더 가깝게 유사하게 유사하게 유사하게 됩니다. 부문 (생물학, 기억?). 유사분열 후, 한 쌍의 동일한 세포가 형성된다. 원래 셀은 프로토타입 역할을 하며 복사본을 만드는 데 적극적인 역할을 합니다. 자바가 아닌 동안 내 이해를 돕기 위해 프로토 타입의 매우 유용한 예, 나는 좋은 응답을 받고있다 파이썬에서 프로토이프 패턴의 비디오 자습서를 만들었습니다. https://youtu.be/_jBjhI6-VDI 직접적인 접근 방식에 는 한 가지 더 문제가 있습니다. 중복을 만들려면 개체의 클래스를 알아야 하므로 코드는 해당 클래스에 종속됩니다.

추가 종속성이 당신을 놀라게하지 않는 경우, 또 다른 캐치가있다. 예를 들어 메서드의 매개 변수가 일부 인터페이스를 따르는 모든 개체를 허용하는 경우 개체가 따르는 인터페이스만 알고 있지만 구체적인 클래스는 알 수 없습니다. 위의 UML 클래스 다이어그램에서 Product 개체가 필요한 클라이언트 클래스는 Product1 클래스를 직접 인스턴스화하지 않습니다. 대신 클라이언트는 개체를 복제하기 위한 프로토타입 인터페이스를 참조합니다. Product1 클래스는 자체 복사본을 만들어 프로토타입 인터페이스를 구현합니다. UML 시퀀스 다이어그램은 런타임 상호 작용을 보여 준다: 클라이언트 개체는 프로토타입:Product1 개체에서 복제()를 호출하며, 이 개체는 자체 복사본(Product:Product1 개체)을 만들고 반환합니다. 이 패턴은 클래스에서 인스턴스화하는 것보다 기존 인스턴스를 복제하는 것이 더 저렴한 경우에 매우 유용합니다. 이 방법은 인스턴스화할 클래스가 런타임에 지정될 때 실제로 도움이 됩니다. 제품의 계층 구조를 나타내는 팩터리 계층 구조를 구축하는 경우 특히 일부 구체적인 인스턴스에 대해 몇 가지 상태 조합만 가능한 경우 막대한 비용이 발생할 수 있습니다.

따라서 프로토타입 패턴은 기존 클래스 인스턴스의 복사본을 얻기 위한 간단한 솔루션으로 간주되어야 합니다. 예제를 사용하여 이 패턴을 이해할 수 있습니다. 나는 영화, 앨범 및 쇼 클래스의 인스턴스를 매우 자주 필요로하는 엔터테인먼트 응용 프로그램을 만들고 있습니다. 비용이 많이 들기 때문에 매번 인스턴스를 만들고 싶지 않습니다. 따라서 프로토타입 인스턴스를 만들고 새 인스턴스가 필요할 때마다 프로토타입을 복제합니다. 프로토 타입은 복제 기능을 중심으로 감싸는 일종의 공장 패턴입니다. 프로토타입은 명령 의 복사본을 기록에 저장해야 할 때 도움이 될 수 있습니다. 경험의 규칙은 복제하는 개체의 실제 복사본인 런타임에 다른 개체를 만들려는 경우 Object를 복제해야 하는 것입니다. True copy는 새로 생성된 개체의 모든 특성이 복제중인 개체와 동일해야 한다는 것을 의미합니다. 대신 new를 사용하여 클래스를 인스턴스화할 수 있다면 모든 특성을 초기 값으로 사용하는 Object를 얻을 수 있습니다. 예를 들어 은행 계좌 거래를 수행하기 위한 시스템을 디자인하는 경우 계정 정보를 담고 있는 개체의 복사본을 만들고 트랜잭션을 수행한 다음 원래 Object를 수정된 개체로 바꿉습니다. 이러한 경우 새 대신 복제()를 사용하려고 합니다.

이 패턴의 단점 중 하나는 개체를 복사하는 프로세스가 복잡할 수 있다는 것입니다. 또한 다른 클래스에 대한 순환 참조가 있는 클래스는 복제하기가 어렵습니다. 프로토타입 레지스트리를 사용하는 경우 프로토타입 개체 자체를 인스턴스화해야 하므로 패턴의 과용은 성능에 영향을 줄 수 있습니다. 프로토타입 패턴은 복제 프로세스를 복제중인 실제 개체에 위임합니다.

カテゴリー: 未分類   パーマリンク

コメントは受け付けていません。