return - prototypes [ type ]. Clone ; } } Java [ 편집 ] / * * Prototype Class * * / public class Cookie implements Cloneable { public Object clone { try { Cookie copy = ( Cookie ) super. clone ; / / In an actual implementation of this pattern you might now change references to / / the expensive to produce parts from the copies that are held inside the prototype. return copy ; } catch ( CloneNotSupportedException e ) { e. printStackTrace ; return null ; } } } / * * Concrete Prototypes to clone * * / public class CoconutCookie extends Cookie { } / * * Client Class * * / public class CookieMachine { private Cookie cookie ; / / could have been a private Cloneable cookie ; public CookieMachine ( Cookie cookie ) { this. cookie = cookie ; } public
##uct { $ this - > topic ='SQL'; } function - - clone { } } writeln ('BEGIN TESTING PROTOTYPE PATTERN') ; writeln ('' ) ; $ phpProto = new PHPBookPrototype ; $ sqlProto = new SQLBookPrototype ; $ book1 = clone $ sqlProto ; $ book1 - > setTitle ('SQL For Cats') ; writeln ('Book 1 topic : '. $ book1 - > getTopic ) ; writeln ('Book 1 title : '. $ book1 - > getTitle ) ; writeln ('' ) ; $ book2 = clone $ phpProto ; $ book2 - > setTitle ('OReilly Learning PHP 5') ; writeln ('Book 2 topic : '. $ book2 - > getTopic ) ; writeln ('Book 2 title : '. $ book2 - > getTitle ) ; writel
; writeln ('Book 2 title : '. $ book2 - > getTitle ) ; writeln ('' ) ; $ book3 = clone $ sqlProto ; $ book3 - > setTitle ('OReilly Learning SQL') ; writeln ('Book 3 topic : '. $ book3 - > getTopic ) ; writeln ('Book 3 title : '. $ book3 - > getTitle ) ; writeln ('' ) ; writeln ('END TESTING PROTOTYPE PATTERN') ; function writeln ( $ line - in ) { echo $ line - in. " < br / > " ; } > [ 5 ] 출력은 다음과 같다. BEGIN TESTING PROTOTYPE PATTERN Book 1 topic : SQL Book 1 title : SQL For Cats Book 2 topic : PHP Book 2 title : OReilly Learning PHP 5 Book 3 topic : SQL Book 3 title : OReilly Learning SQL E
##ord " < < endl < < " Name : " < < m - oStrPersonName < < endl < < " Age : " < < m - ui32Age < < endl < < endl ; } } ; / * * * RecordFactory is the client * / class RecordFactory { private : map < RECORD - TYPE - en, Record * > m - oMapRecordReference ; public : RecordFactory { m - oMapRecordReference [ CAR ] = new CarRecord ( " Ferrari ", 5050 ) ; m - oMapRecordReference [ BIKE ] = new BikeRecord ( " Yamaha ", 2525 ) ; m - oMapRecordReference [ PERSON ] = new PersonRecord ( " Tom ", 25 ) ; } ~ RecordFactory { delete m - oMapRecordReference [ CAR ] ; delete m - oMapRecordReference [ BIKE ] ; delete m - oMapRecordReference [ PERS
Vlissides 그래디 부치 en : Kent Beck 워드 커닝햄 en : Martin Fowler Robert Martin en : Jim Coplien Douglas Schmidt en : Linda Rising 커뮤니티 en : The Hillside Group The Portland Pattern Repository 원본 주소 " " 분류 : 소프트웨어 디자인 패턴숨은 분류 : 인용 오류 - 날짜CS1 관리 - 여러 이름영어 표기를 포함한 문서 둘러보기 메뉴 개인 도구 로그인하지 않음토론기여계정 만들기로그인 이름공간 문서토론 변수 보기 읽기편집역사 보기 더 보기 검색 둘러보기 대문사용자 모임요즘 화제최근 문서 보기임의 문서로도움말기부 도구 여기를 가리키는 문서가리키는 글의 최근 올리기특수 문서 목록고유 링크문서 정보위키데이터 항목이 문서 인용하기 인쇄 / 내보내기 책 만들기PDF로 다운로드인쇄용 판 다른 언어 日 本 語 / 中 文 링크 편집 이 문서는 2018년 10월 29일 ( 월 ) 14 : 30에 마지막으로 편집되었습니다. 모든 문서는 크리에이티브 커먼즈 저작자표시 - 동일조건변경허락 3. 0에 따라 사용할 수 있으며, 추가적인 조건이 적용될 수 있습니다. 자세한 내용은
Record, m - oStrCarName ( - oStrCarName ), m - ui32ID ( - ui32ID ) { } CarRecord ( const CarRecord & - oCarRecord ) : Record { m - oStrCarName = - oCarRecord. m - oStrCarName ; m - ui32ID = - oCarRecord. m - ui32ID ; } ~ CarRecord { } CarRecord * Clone const { return new CarRecord ( * this ) ; } void Print const { cout < < " Car Record " < < endl < < " Name : " < < m - oStrCarName < < endl < < " Number : " < < m - ui32ID < < endl < < endl ; } } ; / * * * BikeRecord is the Concrete Prototype * / class BikeRecord : public Record { private : string m - oStrBikeName ; uint32 - t m - ui32ID ; public : BikeRecord ( const string & - oStr
##션을 수행한다. 그 다음 원래의 객체를 이 객체로 바꿔치기한다. 프로그래머는 이런 경우 new 대신 clone을 쓴다. 예제 [ 편집 ] C [ 편집 ] # include < iostream > # include < map > # include < string > # include < cstdint > using namespace std ; enum RECORD - TYPE - en { CAR, BIKE, PERSON } ; / * * * Record is the Prototype * / class Record { public : Record { } virtual ~ Record { } virtual Record * Clone const = 0 ; virtual void Print const = 0 ; } ; / * * * CarRecord is Concrete Prototype * / class CarRecord : public Record { private : string m - oStrCarName ; uint32 - t m - ui32ID ; public : CarRecord ( const string & - oStrCarName, uint32 - t - ui32ID ) : Record, m - oStrCarName ( - oStrCarName ), m - ui32ID (
; uint32 - t m - ui32ID ; public : BikeRecord ( const string & - oStrBikeName, uint32 - t - ui32ID ) : Record, m - oStrBikeName ( - oStrBikeName ), m - ui32ID ( - ui32ID ) { } BikeRecord ( const BikeRecord & - oBikeRecord ) : Record { m - oStrBikeName = - oBikeRecord. m - oStrBikeName ; m - ui32ID = - oBikeRecord. m - ui32ID ; } ~ BikeRecord { } BikeRecord * Clone const { return new BikeRecord ( * this ) ; } void Print const { cout < < " Bike Record " < < endl < < " Name : " < < m - oStrBikeName < < endl < < " Number : " < < m - ui32ID < < endl < < endl ; } } ; / * * * PersonRecord is the Concrete Prototype * / class Person
##된다 ( pass by reference ). 값 형태로 전달하기 위해서는, " 매직 펑션 " - - clone을 써야한다. 이러한 까닭으로 PHP 5에서는 프로토타입 패턴을 구현하기 매우 쉽다. [ 4 ] < php abstract class BookPrototype { protected $ title ; protected $ topic ; abstract function - - clone ; function getTitle { return $ this - > title ; } function setTitle ( $ titleIn ) { $ this - > title = $ titleIn ; } function getTopic { return $ this - > topic ; } } class PHPBookPrototype extends BookPrototype { function - - construct { $ this - > topic ='PHP'; } function - - clone { } } class SQLBookPrototype extends BookPrototype { function - - construct { $ this - > topic ='SQL'; } function - - clone { } } writ
##변경허락 3. 0에 따라 사용할 수 있으며, 추가적인 조건이 적용될 수 있습니다. 자세한 내용은 이용 약관을 참고하십시오. 미국 및 다른 국가에 등록되어 있는 Wikimedia Foundation, Inc. 소유의 등록 상표입니다. 개인정보 정책 위키백과 소개 면책 조항 개발자 쿠키 정책 모바일 보기
프로토타입 패턴(prototype pattern)은 소프트웨어 디자인 패턴 용어로, 생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 하며, 인스턴스는 새 객체를 만들기 위해 자신을 복제(clone)하게 된다. 프로토타입 패턴은, 추상 팩토리 패턴과는 반대로, 클라이언트 응용 프로그램 코드 내에서 객체 창조자(creator)를 서브클래스(subclass)하는 것을 피할 수 있게 해준다. 프로토타입 패턴은 새로운 객체는 일반적인 방법(예를 들어, new를 사용해서라든지)으로 객체를 생성(create)하는 고유의 비용이 주어진 응용 프로그램 상황에 있어서 불가피하게 매우 클 때, 이 비용을 감내하지 않을 수 있게 해준다.패턴을 구현하려면, 우선 clone 메소드를 선언하는 추상 베이스 클래스를 하나 만든다. 다형적 생성자(polymorphic constructor) 기능이 필요한 클래스가 있다면, 그것을 앞에서 만든 클래스를 상속받게 한 후, clone 메소드 내의 코드를 구현한다.