用於建立重複的物件,同時又能保證效能。它屬於建立型設計模式,它提供了一種建立物件的最佳方法。
prototype (原型)
product 角色負責定義用於複製現有例項來生成新例項的方法。在示例程式中,由 product 介面扮演此角色。
concreteprototype(具體的原型)
concreteprototype 角色負責實現複製現有例項並生成新例項的方法。在示例程式中,由 messagebox 類和 underlinepen 類扮演此角色。
client(使用者)
client 角色負責使用複製例項的方法生成新的例項。在示例程式中,由 manager 類扮演此角色。
建立乙個實現了cloneable介面的抽象類 shape(prototype):
public abstract class shape implements cloneable
public string getid()
public void setid(string id)
public object clone() catch (clonenotsupportedexception e)
return clone;}}
定義具體的實現類(concreteprototype)
//rectangle
public class rectangle extends shape
@override
public void draw()
}//square
public class square extends shape
@override
public void draw()
}//circle
public class circle extends shape
@override
public void draw()
}
管理類(相當於client)
public class shapecache
// 對每種形狀都執行資料庫查詢,並建立該形狀
// shapemap.put(shapekey, shape);
// 例如,我們要新增三種形狀
public static void loadcache()
}
測試程式
public class prototypepatterndemo
}
輸出結果如下:
shape : circle
shape : square
shape : rectangle
下文的適用場景其實也是它的優點
建立多個類,增加**閱讀複雜性(所有設計模式通病)
clone方法只是淺拷貝,除五種基礎型別之外型別都只是簡單的指向引用,不會重新建立成員變數,如需實現需要自定義clone方法。
通過clone方法不會呼叫類的建構函式,部分場景(在建構函式中做一些初始化操作的)需要做額外的處理
(1)物件種類繁多,無法將它們整合到乙個類中時
(2)難以根據類生成例項時
生成例項的過程太過複雜,很難根據類來 生成例項,通常,在想生成乙個和之前使用者通過操作所建立出來的例項完全一樣的例項的時候,我們會事先將使用者通過操作所建立出來的例項儲存起來,然後在需要時通過複製來生成新的例項。
(3)想解耦框架與生成的例項時
想要讓生成例項的框架不依賴於具體的類,這時,不能指定類名來生成例項,要事先」註冊乙個原型的「例項,然後通過複製該例項來生成新的例項。
待補充
Java 設計模式之原型模式 Prototype
模式名原型模式prototype 定義原型模式是建立型模式 的一種,其特點在於通過 複製 乙個已經存在的例項 來返回新的例項,而不是新建例項。被複製的例項就是我們所稱的 原型 這個原型是可定製的。原型模式多用於建立複雜的或者耗時的例項,因為這種情況下,複製乙個已經存在的例項使程式執行更高效 或者建立...
設計模式學習系列6 原型模式(prototype)
原型模式 prototype 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。允許乙個物件再建立另外乙個新物件的時候根本無需知道任何建立細節,只需要請求圓形物件的copy函式皆可。1原型模式構成 客戶 client 角色 客戶類提出建立物件的請求。抽象原型 prototype 角色 ...
設計模式 原型模式
1.首先分析原型模式的由來 一般來說,建立乙個物件可以由以下方法 知道物件的具體型別,直接用new生成。不知道型號,知道相應的需求,可以使用工廠方法模式。根據乙個已有的物件來複製為乙個新的物件,可以使用原型模式。2.原型模式可以簡單理解為拷貝原型物件得到新的物件。想象乙個配鑰匙的小店,給店主乙個原有...