Java設計模式---原型模式

guoduan發表於2020-06-04

  Java設計模式---原型模式  

  辰兮要努力 2020-06-02 12:04:32 70 收藏 2 原力計劃

  分類專欄: 設計模式

  文章標籤: 資料庫 java 設計模式 面試 經驗分享

  版權宣告:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結和本宣告。

  本文連結:https://blog.csdn.net/weixin_45393094/article/details/106492207

  收起

  你好我是辰兮,很高興你能來閱讀,本篇給你介紹Java設計模式之原型模式,透過簡單的案例給你講解,分享給初學者,大家一起進步。

  1.JAVA基礎面試常考問題 : JAVA面試基礎常考題彙集

  2.JAVA面試SSM框架常考 :JAVA框架面試題彙集

  文章目錄

  一、序言

  二、原型模式的定義與特點

  三、原型模式的結構與實現

  一、序言

  在有些系統中,存在大量相同或相似物件的建立問題,如果用傳統的建構函式來建立物件,會比較複雜且耗時耗資源,用原型模式生成物件就很高效,就像孫悟空拔下猴毛輕輕⼀吹就變出很多孫悟空⼀樣簡單。

  二、原型模式的定義與特點

  原型(Prototype)模式的定義如下:

  用⼀個已經建立的例項作為原型,透過複製該原型物件來建立⼀個和原型相同或相似的新物件。

  在這⾥,原型例項指定了要建立的物件的種類。⽤這種⽅式建立物件⾮常⾼效,根本⽆須知道物件建立的細節。

  例如,Windows 作業系統的安裝通常較耗時,如果複製就快了很多。在⽣活中複製的例⼦⾮常多,這⾥不⼀⼀列舉了。

  三、原型模式的結構與實現

  由於 Java 提供了物件的 clone() ⽅法,所以⽤ Java 實現原型模式很簡單。

  1、模式的結構

  原型模式包含以下主要⻆⾊。

  抽象原型類:規定了具體原型物件必須實現的接⼝。

  具體原型類:實現抽象原型類的 clone() ⽅法,它是可被複制的物件。

  訪問類:使⽤具體原型類中的 clone() ⽅法來複制新的物件。

  2、模式的實現

  原型模式的克隆分為淺克隆和深克隆,Java 中的 Object 類提供了淺克隆的 clone() ⽅法,具體原型類只要實現 Cloneable 接⼝就可實現物件的淺克隆,這⾥的 Cloneable 接⼝就是抽象原型類。淺複製實現Cloneable,重寫,深複製是透過實現Serializable讀取二進位制流。

  首先我們常見一個類繼承Cloneable介面,然後重寫裡面的clone方法

  //具體原型類

  public class Realizetype implements Cloneable

  {

  Realizetype()

  {

  System.out.println("具體原型建立成功!");

  }

  public Object clone() throws CloneNotSupportedException

  {

  System.out.println("具體原型複製成功!");

  return (Realizetype)super.clone();

  }

  }

  測試類

  //原型模式的測試類

  public class PrototypeTest {

  public static void main(String[] args)throws CloneNotSupportedException {

  Realizetype obj1=new Realizetype();

  Realizetype obj2=(Realizetype)obj1.clone();

  System.out.println("obj1==obj2?"+(obj1==obj2));

  }

  }

  具體原型建立成功!

  具體原型複製成功!

  obj1==obj2?false

  實現克隆操作,繼承Cloneable,重寫clone()方法。

  原型模式同樣用於隔離類物件的使用者和具體型別(易變類)之間的耦合關係,它同樣要求這些“易變類”擁有穩定的介面。

  3、原型模式的應用場景

  ①物件之間相同或相似,即只是個別的幾個屬性不同的時候。

  ②物件的建立過程比較麻煩,但複製比較簡單的時候。

  public class Citation implements Cloneable {

  String name;

  String info;

  String college;

  public Citation(String name, String info, String college) {

  this.name = name;

  this.info = info;

  this.college = college;

  }

  public String getName() {

  return name;

  }

  public void setName(String name) {

  this.name = name;

  }

  public String getInfo() {

  return info;

  }

  public void setInfo(String info) {

  this.info = info;

  }

  public String getCollege() {

  return college;

  }

  public void setCollege(String college) {

  this.college = college;

  }

  void display()

  {

  System.out.println(name+info+college);

  }

  public Object clone() throws CloneNotSupportedException

  {

  System.out.println("獎狀拷⻉成功!");

  return (Citation)super.clone();

  }

  }

  //原型模式的測試類

  public class PrototypeTest {

  public static void main(String[] args)throws CloneNotSupportedException {

  Citation obj1=new Citation("盧本偉","同學:在2020學年獲得一等獎學金","武漢大學");

  obj1.display();

  Citation obj2=(Citation) obj1.clone();

  obj2.setName("PDD");

  obj2.display();

  }

  }

  盧本偉同學:在2020學年獲得一等獎學金武漢大學

  獎狀拷⻉成功!

  PDD同學:在2020學年獲得一等獎學金武漢大學

  ①原型模式(Prototype Pattern)用於建立重複的物件,同時又能保證效能。

  ②它屬於建立型設計模式,它提供了一種建立物件的最佳方法。

  ③這種模式是實現了一個原型介面,該介面用於建立當前物件的克隆。當直接建立物件的代價比較大時,則採用這種模式。

  ④例如,一個物件需要在一個高代價的資料庫操作之後被建立。我們可以快取該物件,在下一個請求時返回它的克隆,在需要的時候更新資料庫,以此來減少資料庫呼叫。

  ————————————————

  版權宣告:本文為CSDN博主「辰兮要努力」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。

  原文連結:https://blog.csdn.net/weixin_45393094/article/details/106492207


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69971700/viewspace-2696110/,如需轉載,請註明出處,否則將追究法律責任。

相關文章