<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 一、原型模式 用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。 **用實例來說話:我要發簡歷,自己寫了一份模板,然后復制了N 份。**如下: ~~~ //模板:class Resume { Private string name; Public Resume (string name) { This.name=name; } } //客戶端: Static void Main(string[] args) { Resume a=new Resume("大鳥"); Resume b=new Resume("大鳥"); Resume b=new Resume("大鳥"); } ~~~ 如果現在我想改,那就得把N份全改了,本來只是改動一點,卻需要很長時間,沒效率,真是費力不討好的工作。 **原型模式可以改變這種低級費力的工作。** 原型模式其實就是從一個對象在創建靈位一個可定制的對象,而且不需知道任何創建的細節。在原型模式通過克隆Clone來實現對象之間的這種定制。 區別:以前的復制是每個對象都去實例化類,現在的克隆,是只實例化一個對象,然后通過這個對象傳遞給其他對象。 具體如下: ~~~ class Resume { Private string name; Public Resume (string name) { This.name=name; } //模板中增加克隆方法 Public object Clone() { Return (Object)this.MemberwiseClone(); } } Static void Main(string[] args) { Resume a=new Resume("大鳥"); Resume b=(Resume)a.clone(); Resume c=(Resume)a.clone(); } ~~~ Clone方法時將當前對象的非靜態字段復制到該新對象,如果字段是值類型,則對該字段執行逐位復制。如果字段是引用類型,則復制引用但不復制引用的對象。 有人有問了,那我要向實現將引用的對象也克隆過來怎么辦? 上邊的方法在模板中添加Clone 是一種淺復制,還有一種深復制,可以解決克隆引用對象的問題。 **深復制** 深復制需要增加三步: 1、讓引用的類也繼承系統的克隆類Icloneable,在類中添加克隆方法。 2、在調用類中,增加以被調用類為參數的私用構造函數,結果返回被調用類克隆方法,從而實現克隆。 3、在調用類的克隆方法中,調用私用構造方法,讓引用克隆完成。 假如工作經歷類為要調用的類: **1、讓工作經歷類繼承接口** ~~~ Class WorkExperience :Icloneable { //增加克隆方法 Public Object Clone() { Return (Object) this.MemberwiseClone(); } } ~~~ **2、在簡歷類中增加私有構造函數** ~~~ Private Resume(WorkExperience work) { This.work=(WorkExperience)work.Clone(); } ~~~ **3、修改簡歷類中的克隆方法。** ~~~ public Object Clone() { Resume obj=new Resume(this.work); …… } ~~~ ## 二、類圖 ![](https://box.kancloud.cn/2016-02-18_56c5ce70e6a6d.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看