Java 實現原型(Prototype)模式,javaprototype
public class BaseSpoon implements Cloneable {//spoon 匙, 調羹 String name;public String getName() {return name;}public void setName(String name) {this.name = name;}@Overrideprotected BaseSpoon clone() throws CloneNotSupportedException {System.out.println("clone a BaseSpoon");BaseSpoon object = null;try {object = (BaseSpoon) super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();System.err.println("BaseSpoon is not Cloneable");}return object;}}
public class SaladSpoon extends BaseSpoon {public SaladSpoon() {setName("Salad Spoon");//沙拉 匙}}
public class SoupSpoon extends BaseSpoon {public SoupSpoon() {setName("Soup Spoon");//湯匙}}
/* * 原型模式 * 用原型執行個體指定建立對象的種類,並且通過拷貝這些原型建立新的對象。 * Prototype原型模式是一種建立型設計模式,Prototype模式允許一個對象再建立另外一個可定製的對象,根本無需知道任何如何建立的細節, * 工作原理是:通過將一個原型對象傳給那個要發動建立的對象,這個要發動建立的對象通過請求原型對象拷貝它們自己來實施建立。 * 在java中 體現為 clone() 對象 */public class Test {public static void main(String[] args) throws CloneNotSupportedException {//建立原型BaseSpoon soup1 = new SoupSpoon();BaseSpoon salad1 = new SaladSpoon();//clone原型 得到新對象SoupSpoon soup2 = (SoupSpoon) soup1.clone();SaladSpoon salad2 = (SaladSpoon) salad1.clone();//輸出clone後原型和對應新對象的名字System.out.println("clone 後:" + soup1.getName() + "-" + soup2.getName());System.out.println("clone 後:" + salad1.getName() + "-" + salad2.getName());soup1.setName("soup1 spoon");salad1.setName("salad1 spoon");soup2.setName("soup2 spoon");salad2.setName("salad2 spoon");System.out.println("屬性重新賦值後:" + soup1.getName() + "-" + soup2.getName());System.out.println("屬性重新賦值後:" + salad1.getName() + "-" + salad2.getName());}}
C#/Java中,Prototype原型模式是否就指Cloneable相關的介面?
原型模式就是說一個請求會有一個對象來處理,但是這個對象應該不是複製或者複製出來的吧。
用java寫的prototype設計模式,運行時說clone那裡有問題,不知道要怎改
朋友,先不說你的運行問題,我看了一下你的代碼,我覺得本身代碼的實際意義就不大。 你的Clone介面的clonebook方法,從方法的命名到方法的參數再到方法的傳回值都是具體實作類別而不是抽象類別,這樣去使用原型設計模式有什麼實際意義呢?希望和你深入探討,請你說明一下你這樣做的應用情境和具體原因,我就能知道你到底有沒有真正理解prototype設計模式的精髓了。