??? 原型模式屬于對象的創建模式。
1. 定義
???? 用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象.
2. 工作原理
????? 通過將一個原型對象傳給那個要發動創建的對象,這個要發動創建的對象請求原型對象拷貝它們自己來實施創建.
?????
3. 使用方法
???? Java語言的構件模型直接支持原始模型模式.所有的JavaBean都繼承自java.lang.Object,而Object類提供一個clone()方法,可以將一個JavaBean對象復制一份.但是,這個JavaBean必須實現一個標識接口Cloneable,表明這個JavaBean支持復制.
4. 經典應用場景
??? 孫悟空在與黃風怪的戰斗中,使用了一個身外身的手段,叫聲"變",變出來百來個行者.這中手段在面向對象領域里就是原型模式.
??? 嘿嘿,我也用這種方法來“變”出幾個Amigo來,嘻嘻,一個去工作,一個去談戀愛,一個去跟朋友玩,一個去跟家人逛吧......
??? 看我的......
/**?*/
/**
?*?設計模式-原型模式
?*?
@author
?Amigo?Xie(xiexingxing1121@126.com)
?*?
@since
?2007/03/13?22:20
?
*/
class
?CloneAmigo?
implements
?Cloneable?
{

????
/**?*/
/**
?身高(單位:cm)
*/
????
private
?
int
?height;
????

????
/**?*/
/**
?體重(單位:kg)
*/
????
private
?
int
?weight;
????

????
/**?*/
/**
?年齡
*/
????
private
?
int
?age;


????
/**?*/
/**
?????*?構造函數
?????*?
@param
?height?
?????*?
@param
?weight
?????*?
@param
?age
?????
*/
????
public
?CloneAmigo(
int
?height,?
int
?weight,?
int
?age)?
{
????????
this
.height?
=
?height;
????????
this
.weight?
=
?weight;
????????
this
.age?
=
?age;??
????}
????

????
public
?Object?clone()?
{
????????
//
創建一個本類對象,并返回給調用者
?
????????CloneAmigo?temp?
=
?
new??CloneAmigo(height,?weight,?age);
????????return?(Object)temp;
????}
????
public
?
void
?setHeight(
int
?height)?
{????
????????
this
.age?
=
?age;
????}
????pubiic?
int
?getHeight()?
{
????????
return
?height;
????}
????
public
?
void
?setWeight(
int
?weight)?
{
????????
this
.weight?
=
?weight;
????}
????
public
?
int
?getWeight()?
{
????????
return
?weight;
????}
????
public
?
void
?setAge(
int
?age)?
{
????????
this
.age?
=
?age;
????}
????
public
?
void
?getAge()?
{
????????
return
?age;
????}
}
??? 測試類的代碼如下:
public
?
class
??Client?
{

????
public
?
static
?
void
?main(String[]?args)?
{
????????CloneAmigo?amigo1?
=
?
new??CloneAmigo?(158,?45,?24);
????????//通過對一個Amigo進行克隆得到第二個Amigo
????????CloneAmigo?amigo2?=?(CloneAmigo?)?amigo1.clone();
????????System.out.println("第一個Amigo的身高:?"?+?amigo1.getHeight());
????????System.out.println("第二個Amigo的身高:?"?+?amigo2.getHeight());

????????System.out.println("第一個Amigo的體重:?"?+?amigo1.getWeight());
????????System.out.println("第二個Amigo的體重:?"?+?amigo2.getWeight());

????????System.out.println("第一個Amigo的年齡:?"?+?amigo1.getAge());
????????System.out.println("第二個Amigo的年齡:?"?+?amigo2.getAge());
????}
}
????? 從運行結果可看出兩個Amigo的身高、體重、年齡都是一樣的。
5. 重點關注----克隆滿足的條件
????? 1)克隆的對象與原對象不是同一個對象;
????? 2)克隆對象與原對象的類型一樣;
????? 3)如果對象x的equals()方法定義恰當的話,那么x.clone().equals(x)應當是成立的。
參考書籍:《Java與模式》
????????????????????《Patterns in Java》
posted on 2007-03-13 23:20
阿蜜果 閱讀(3117)
評論(6) 編輯 收藏 所屬分類:
Design Pattern