使用原型例項指定建立物件的種類,並且通過轉殖這些原型建立新的物件;原理是將乙個原型物件傳給要發動建立的物件,該物件通過請求原型物件轉殖自己來建立過程
//轉殖方法
public prototype clone()
}jdk中為我們提供了轉殖的方法clone(),從object繼承下來,乙個物件要實現轉殖,需要實現乙個cloneable()介面,該介面僅起乙個標誌作用,實現之後就可以呼叫super.clone()方法實現轉殖
1) 深度轉殖與淺度轉殖
對某個物件進行轉殖,物件的的成員變數如果包括引用型別或者陣列,那麼轉殖的時候其實是不會把這些物件也帶著複製到轉殖出來的物件裡面的,只是複製乙個引用,這個引用指向被轉殖物件的成員物件,但是基本資料型別是會跟著被帶到轉殖物件裡面去的。而深度可能就是把物件的所有屬性都統統複製乙份新的到目標物件裡面去; 如圖所示
1) 工作週報實現方案
2) **實現
淺度轉殖實現週報轉殖
//淺度轉殖
public class weeklylog implements cloneable
public void setname(string name)
public string getdate()
public void setdate(string date)
public string getcontent()
public void setcontent(string content)
public weeklylog clone() catch (clonenotsupportedexception e)
}}public class cloneclient
}
引入原型模式後,sunny軟體公司oa系統發現有些週報帶有附件,如《專案進展報告彙總表》等;可使用深度轉殖來實現
public class attachment implements serializable,cloneable
public void setname(string name)
public void download()
}public class weeklylogdeep implements serializable
public void setattachment(attachment attachment)
public string getname()
public void setname(string name)
public string getdate()
public void setdate(string date)
public string getcontent()
public void setcontent(string content)
//第一種實現方式: 使用序列化技術實現深度轉殖
public weeklylogdeep deepclone1() throws ioexception, classnotfoundexception
//第二種實現方式,在非基本資料型別上再次呼叫clone()方法
public weeklogdeep deepclone2()
}
原型管理器(prototype manager)是將多個原型物件儲存在乙個集合中供客戶端使用,它是乙個專門負責轉殖物件的工廠,其中定義了乙個集合用於儲存原型物件,如果需要某個原型物件可以通過複製集合中對應的物件來獲取
//抽象公文介面
public inte***ce officialdocument extends cloneable
package com.zach.creator;
//可行性分析報告
public class far implements officialdocument catch (clonenotsupportedexception e)
return far;
}@override
public void display() }
package com.zach.creator;
//軟體需求規格說明書
public class srs implements officialdocument catch (clonenotsupportedexception e)
return srs;
}@override
public void display() }
//原型管理器(餓漢式單例實現)
public class prototypemanage
//增加新的公文物件
public void addofficialdocument(string key, officialdocument doc)
//通過淺轉殖取新的公文物件
public officialdocument getofficialdocument(string key)
public static prototypemanage getprototypemanager() }
public class clinet
}
1) 優點
2) 適用場景
建立型模式 原型模式
原型 prototype 模式主要用於建立物件的轉殖,通常其最簡單的形式就是採用自定 clone 函式並 傳入物件引數以返回此物件的乙個副本,這在 python 實作上可使用內定 copy.cop y 或 copy.deepcopy 函式來達到此目的。當已有乙個物件但對此物件的某些部分會被變更卻又想...
原型模式 建立型模式
文章首發個人部落格 如果我們有乙個類 sheep 它裡面有兩個屬性,名稱 name 年齡 age 現在我們有乙個它的例項 s1 我們需要按照這個例項的屬性再去建立兩個物件。1 sheep data public class sheep 2 main public class main 原型模式 用原...
建立型模式 原型模式 prototype
用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。main.cc include include software computer.h design pattern prototype for example,the company to employees with compute...