디자인 모델 - 원형 (Unity3D 에서 응용)

5353 단어 Unity3D
원형 Prototype 대상 간 데이터 복사 (깊 은 복사, 얕 은 복사) 원형 모델 의 목적 은 복사 대상 을 위 한 것 이다.얕 은 복사: 값 형식 데이터 복사 깊이 복사: 참조 형식 데이터 복사
public class WordDocument
 {
    public string Text{ get; set;}
    public Diagram diagram{ get; set;}
}

public class Diagram
{
    public string Data{ get; set;}
}

public class Test: MonoBehaviour
{

    private void Start ()
    {
        WordDocument document1 = new WordDocument ();
        document1.Text = "WordDocument";
        Diagram diagram = new Diagram();
        document1.diagram = diagram;

        WordDocument document2 = new WordDocument ();
        document2.Text = document1.Text;
        document2.diagram = document2.diagram;

    }

}

이 때 대상 을 복사 하려 면 호출 자가 생 성 작업 을 해 야 하 는 것 을 발견 하여 사용 하기 가 매우 불편 합 니 다.우 리 는 대상 의 생 성 작업 을 공급 자 에 게 맡 겨 야 한다.
public class WordDocument : ICloneable {

    public string Text{ get; set;}
    public Diagram diagram{ get; set;}

    public object Clone ()
    {
        WordDocument wordDocument = new WordDocument ();
        wordDocument.Text = Text;
        wordDocument.diagram = diagram;
        return wordDocument;
    }
}

public class Prototype : MonoBehaviour
{

    private void Start ()
    {
        WordDocument document1 = new WordDocument ();
        document1.Text = "WordDocument1";
        Diagram diagram = new Diagram();
        diagram.Data = "diagram1";
        document1.diagram = diagram;

        WordDocument document2 = document1.Clone () as WordDocument;

        document2.Text = "diagram1";
        document2.diagram.Data = "diagram2";

        print (document1.Text);
        print (document1.diagram.Data);
    }

}

호출 자 복제 대상 을 개조 하면 매우 간단 해 지고 복잡 한 복사 작업 은 공급 자 에 게 맡 겨 진다.실행 결과: document 1 의 diagram 이 바 뀌 었 습 니 다. document 2 의 diagram 을 수정 하 였 습 니 다. document 1 의 diagram 에 영향 을 미 치 는 것 이 무엇 입 니까?복사 할 때 diagram 의 인용 만 복 사 했 기 때문에 실제 document 1 과 document 2 는 하나의 diagram 을 공유 합 니 다.깊 은 복사 가 필요 합 니 다.
Diagram 에 대해 서도 IClineable 을 실현 합 니 다.
public class Diagram : ICloneable
{
    public string Data{ get; set;}

    public object Clone ()
    {
        Diagram diagram = new Diagram ();
        diagram.Data = Data;
        return diagram;
    }
}

public class WordDocument : ICloneable {

    public string Text{ get; set;}
    public Diagram diagram{ get; set;}

    public object Clone ()
    {
        WordDocument wordDocument = new WordDocument ();
        wordDocument.Text = Text;
        Diagram diagramCopy = diagram.Clone () as Diagram; 
        wordDocument.diagram = diagramCopy;
        return wordDocument;
    }

}

실행 결과 document 1 의 diagram 에 변화 가 없 는 것 은 복사 에 성공 했다 는 것 을 의미한다.
이 모드 를 사용 할 때 깊 은 복사 와 얕 은 복사 에 주의 하 세 요.

좋은 웹페이지 즐겨찾기