1. 程式人生 > >設計模式_創建型模式_原型模式

設計模式_創建型模式_原型模式

image 現在 抽象類 擴展 program pri this 遇到 原型

轉載自:http://blog.csdn.net/lovelion 作者:劉偉

原型模式(Prototype Pattern):使用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的

對象。原型模式是一種對象創建型模式。

原型模式的工作原理很簡單:

將一個原型對象傳給那個要發動創建的對象,這個要發動創建的對象通過請求原型對象拷貝自己來實現創建過程。

由於在軟件系統中我們經常會遇到需要創建多個相同或者相似對象的情況,因此原型模式在真實開發中的使用

頻率還是非常高的。原型模式是一種“另類”的創建型模式,創建克隆對象的工廠就是原型類自身,

工廠方法由克隆方法來實現

需要註意的是通過克隆方法所創建的對象是全新的對象

,它們在內存中擁有新的地址,通常對克隆所產生的對象進行修改對原型對象不會造成任何影響,每一個克隆對象都是相互獨立的。通過不同的方式修改可以得到一系列相似但不完全相同的對象

原型模式的結構如圖如示:

技術分享圖片

●Prototype(抽象原型類):它是聲明克隆方法的接口,是所有具體原型類的公共父類,可以是抽象類也可以是接口,甚至還可以是具體實現類。

● ConcretePrototype(具體原型類):它實現在抽象原型類中聲明的克隆方法,在克隆方法中返回自己的一個克隆對象。

● Program(客戶類):讓一個原型對象克隆自身從而創建一個新的對象,在客戶類中只需要直接實例化或通過工廠方法等方式創建一個原型對象,再通過調用該對象的克隆方法即可得到多個相同的對象。由於客戶類針對抽象原型類Prototype編程,因此用戶可以根據需要選擇具體原型類,系統具有較好的可擴展性,增加或更換具體原型類都很方便。

具體代碼如下:

ProtoType:

1     abstract class ProtoType
2     {
3         abstract public void setAttr(string str);
4         abstract public String getAttr();
5         abstract public ProtoType Clone();
6     }

ConcretePrototype:

 1     class ConcretePrototype : ProtoType
 2     {
 3         private
String attr; //成員屬性 4 public override void setAttr(String attr) 5 { 6 this.attr = attr; 7 } 8 public override String getAttr() 9 { 10 return this.attr; 11 } 12 //克隆方法 13 public override ProtoType Clone() 14 { 15 //創建個新對象 16 ProtoType cloneObject = new ConcretePrototype(); 17 cloneObject.setAttr(this.attr); 18 return cloneObject; 19 } 20 }

Program:

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             //創建一個ConcretePrototype對象作為原型對象
 6             ProtoType object1 = new ConcretePrototype();
 7             object1.setAttr("Sunny");
 8             //調用Clone方法克隆一個對象
 9             ProtoType newObject = object1.Clone();
10             Console.WriteLine(newObject.getAttr());
11 
12             Console.Read();
13         }
14     }

設計模式_創建型模式_原型模式