亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

原型(Prototype)模式

2024-07-21 02:04:04
字體:
來源:轉載
供稿:網友

一、 原型(Prototype)模式

原型模式的用意是:通過給出一個原型對象來指明所要創建的對象類型,然后用復制這個原型對象的辦法創建出更多的同類型對象。

從孫大圣的手段談起

孫悟空在與黃風怪的戰斗中,"使一個身外身的手段:把毫毛揪下一把,用口嚼得粉碎,望上一噴,叫聲'變',變有百十個行者,都是一樣得打扮,各執一根鐵棒,把那怪圍在空中。"換而言之,孫悟空可以根據自己的形象,復制出很多"身外身"來。

老孫這種身外身的手段在面向對象設計領域里叫原型(Prototype)模式。

C#對原型模式的支持

在C#里面,我們可以很容易的通過Clone()方法實現原型模式。任何類,只要想支持克隆,必須實現C#中的ICloneable接口。ICloneable接口中有一Clone方法,可以在類中復寫實現自定義的克隆方法。克隆的實現方法有兩種:淺拷貝(shallow copy)與深拷貝(deep copy)。

(以下摘自:《.NET框架程序設計(修訂版)》,李建忠譯)淺拷貝是指當對象的字段值被拷貝時,字段引用的對象不會被拷貝。例如,如果一個對象有一個指向字符串的字段,并且我們對該對象做了一個淺拷貝,那么兩個對象將引用同一個字符串。而深拷貝是對對象實例中字段引用的對象也進行拷貝的一種方式,所以如果一個對象有一個指向字符串的字段,并且我們對該對象做了一個深拷貝的話,我們將創建一個新的對象和一個新的字符串--新對象將引用新字符串。需要注意的是執行深拷貝后,原來的對象和新創建的對象不會共享任何東西;改變一個對象對另外一個對象沒有任何影響。


二、 Prototype模式的結構:

 

客戶(Client)角色:客戶類提出創建對象的請求。
抽象原型(Prototype)角色:這是一個抽象角色,通常由一個C#接口或抽象類實現。此角色給出所有的具體原型類所需的接口。在C#中,抽象原型角色通常實現了ICloneable接口。
具體原型(Concrete Prototype)角色:被復制的對象。此角色需要實現抽象原型角色所要求的接口。

using System;

namespace DoFactory.GangOfFour.Prototype.Structural
{
 
  // MainApp test application

  class MainApp
  {
   
    static void Main()
    {
      // Create two instances and clone each

      ConcretePrototype1 p1 = new ConcretePrototype1("I");
      ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
      Console.WriteLine ("Cloned: {0}", c1.Id);

      ConcretePrototype2 p2 = new ConcretePrototype2("II");
      ConcretePrototype2 c2 = (ConcretePrototype2)p2.Clone();
      Console.WriteLine ("Cloned: {0}", c2.Id);

      // Wait for user
      Console.Read();
    }
  }

  // "Prototype"

  abstract class Prototype
  {
    private string id;

    // Constructor
    public Prototype(string id)
    {
      this.id = id;
    }

    // Property
    public string Id
    {
      get{ return id; }
    }

    public abstract Prototype Clone();
  }

  // "ConcretePrototype1"

  class ConcretePrototype1 : Prototype
  {
    // Constructor
    public ConcretePrototype1(string id) : base(id)
    {
    }

    public override Prototype Clone()
    {
      // Shallow copy
      return (Prototype)this.MemberwiseClone();
    }
  }

  // "ConcretePrototype2"

  class ConcretePrototype2 : Prototype
  {
    // Constructor
    public ConcretePrototype2(string id) : base(id)
    {
    }

    public override Prototype Clone()
    {
      // Shallow copy
      return (Prototype)this.MemberwiseClone();
    }
  }
}
四、 帶Prototype Manager的原型模式

原型模式的第二種形式是帶原型管理器的原型模式,其UML圖如下:

 

客戶(Client)角色:客戶端類向原型管理器提出創建對象的請求。
抽象原型(Prototype)角色:這是一個抽象角色,通常由一個C#接口或抽象類實現。此角色給出所有的具體原型類所需的接口。在C#中,抽象原型角色通常實現了ICloneable接口。
具體原型(Concrete Prototype)角色:被復制的對象。此角色需要實現抽象的原型角色所要求的接口。
原型管理器(Prototype Manager)角色:創建具體原型類的對象,并記錄每一個被創建的對象。


下面這個例子演示了在原型管理器中存儲用戶預先定義的顏色原型,客戶通過原型管理器克隆顏色對象。

六、 Prototype模式的優點與缺點

Prototype模式的優點包括

1、Prototype模式允許動態增加或減少產品類。由于創建產品類實例的方法是產批類內部具有的,因此增加新產品對整個結構沒有影響。

2、Prototype模式提供了簡化的創建結構。工廠方法模式常常需要有一個與產品類等級結構相同的等級結構,而Prototype模式就不需要這樣。

3、Portotype模式具有給一個應用軟件動態加載新功能的能力。由于Prototype的獨立性較高,可以很容易動態加載新功能而不影響老系統。

4、產品類不需要非得有任何事先確定的等級結構,因為Prototype模式適用于任何的等級結構。


Prototype模式的缺點:

Prototype模式的最主要缺點就是每一個類必須配備一個克隆方法。而且這個克隆方法需要對類的功能進行通盤考慮,這對全新的類來說不是很難,但對已有的類進行改造時,不一定是件容易的事。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91久久久久久久久| 国产欧美一区二区白浆黑人| 欧美限制级电影在线观看| 亚洲xxxx18| 欧美日韩亚洲国产一区| 久久久久久久爱| 国产精品久久97| 成人欧美一区二区三区在线湿哒哒| 一道本无吗dⅴd在线播放一区| 日韩av在线免费| 亚洲精美色品网站| 精品国产999| 最近2019中文免费高清视频观看www99| 2018中文字幕一区二区三区| 欧美美女操人视频| 亚洲一区中文字幕| 欧美极品少妇xxxxⅹ裸体艺术| 色噜噜国产精品视频一区二区| 深夜精品寂寞黄网站在线观看| 亚洲精品国产拍免费91在线| 国产一区二区三区中文| 国产精品美女网站| 久久九九精品99国产精品| 欧美高清无遮挡| 日韩电视剧免费观看网站| 国产精品稀缺呦系列在线| 国产精品视频一区二区高潮| 91爱爱小视频k| 日韩网站免费观看| 亚洲一区免费网站| 亚洲自拍偷拍一区| 在线观看精品自拍私拍| 欧美另类第一页| 亚洲美女又黄又爽在线观看| 久久好看免费视频| 久久视频在线观看免费| 91久久精品国产91久久性色| 国产日韩欧美在线观看| 欧美性色视频在线| 久久精品99久久香蕉国产色戒| 欧美刺激性大交免费视频| 亚洲国产天堂网精品网站| 狠狠久久亚洲欧美专区| 日韩亚洲国产中文字幕| 亚洲男人av电影| 久久久久久久久久久免费精品| 26uuu日韩精品一区二区| 精品亚洲男同gayvideo网站| 欧美精品在线免费观看| 欧美成人性生活| 亚洲精品国产精品国自产观看浪潮| 国产精品老牛影院在线观看| www.日本久久久久com.| 亚洲免费电影一区| 91久久综合亚洲鲁鲁五月天| 亚洲bt天天射| 欧美在线观看一区二区三区| 欧美成人精品在线视频| 久久99久久亚洲国产| 欧美午夜影院在线视频| 久久午夜a级毛片| 综合久久五月天| 亚洲日本成人网| 国产精品视频免费在线观看| 国内精品久久久久久久久| 成人黄色片在线| 久久久国产精品x99av| 日韩精品视频免费在线观看| 亚洲视屏在线播放| 国产情人节一区| 狠狠躁夜夜躁人人爽天天天天97| 亚洲性夜色噜噜噜7777| 日韩高清免费观看| 亚洲精品在线观看www| 色伦专区97中文字幕| 精品国产欧美一区二区三区成人| 国产香蕉一区二区三区在线视频| 国产日韩精品在线| 国产性猛交xxxx免费看久久| 欧洲精品在线视频| 欧美电影免费观看高清完整| 欧美精品久久久久| 亚洲精品国产精品自产a区红杏吧| 91人人爽人人爽人人精88v| 欧美性生交xxxxx久久久| 日韩精品极品在线观看| 欧美精品中文字幕一区| 欧美高跟鞋交xxxxhd| 久久激情视频久久| 日韩亚洲精品电影| 91免费高清视频| 成人性教育视频在线观看| 欧美第一淫aaasss性| 北条麻妃在线一区二区| 国产有码在线一区二区视频| 日韩在线不卡视频| 亚洲第一网站男人都懂| 国产精品日韩欧美综合| 亚洲欧美999| 中文字幕日韩欧美| 国产精品欧美风情| 欧美成人一区二区三区电影| 911国产网站尤物在线观看| 午夜精品久久久久久久99黑人| 日韩在线一区二区三区免费视频| 国产成人综合av| 岛国av一区二区在线在线观看| 日本欧美一二三区| 国产精品电影一区| 永久免费精品影视网站| 国产成人综合精品| 亚洲国产高清自拍| 国产精品专区一| 国产精品一区av| 亚洲欧美国产精品久久久久久久| 精品电影在线观看| 色一区av在线| 亚洲成人精品久久| 38少妇精品导航| 91av在线国产| 这里只有精品久久| 日韩欧亚中文在线| 色一情一乱一区二区| 欧美另类精品xxxx孕妇| 韩国一区二区电影| 亚洲美女精品成人在线视频| 国内精品久久久久| 欧美裸身视频免费观看| 国产精品久久久久久久久久久久| 成人黄色片网站| 日日狠狠久久偷偷四色综合免费| 青草青草久热精品视频在线网站| 亚洲精品少妇网址| 亚洲综合一区二区不卡| 国产日本欧美一区| 久久精品人人做人人爽| 2019中文字幕在线观看| 91香蕉嫩草影院入口| …久久精品99久久香蕉国产| 亚洲女同性videos| 91av视频在线观看| 久久成人精品电影| 疯狂做受xxxx高潮欧美日本| 国产精品美乳在线观看| 亚洲一级黄色片| 国产精品成av人在线视午夜片| 2018国产精品视频| www.久久草.com| 在线观看91久久久久久| 全亚洲最色的网站在线观看| 国产97人人超碰caoprom| 尤物精品国产第一福利三区| 亚洲国语精品自产拍在线观看| 91黑丝高跟在线| 日本午夜精品理论片a级appf发布| 亚洲大尺度美女在线| 欧美疯狂性受xxxxx另类| 97av在线视频免费播放| 国产精品精品久久久久久| 日韩欧美在线视频日韩欧美在线视频| 成人久久久久久| 日韩大片在线观看视频| 国产精品视频播放| 亚洲福利在线视频|