Java 實現原型(Prototype)模式,javaprototype

來源:互聯網
上載者:User

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設計模式的精髓了。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.