java設計模式5--原型模式(Prototype)

來源:互聯網
上載者:User

標籤:

本文地址:http://www.cnblogs.com/archimedes/p/java-prototype-pattern.html,轉載請註明源地址。

原型模式

用原型執行個體指定建立對象的種類,並且通過拷貝這些原型建立新的對象。

概述

原型模式是從一個對象出發得到一個和自己有相同狀態的新對象的修正模式,該模式的關鍵是將一個對象定義為原型,並為其提供複製自己的方法。 

java.lang.Object類的clone方法

參見《java中的深淺複製》

適用性

1.當一個系統應該獨立於它的產品建立、構成和表示時。

2.當要執行個體化的類是在運行時刻指定時,例如,通過動態裝載。

3.為了避免建立一個與產品類層次平行的工廠類層次時。

4.當一個類的執行個體只能有幾個不同狀態組合中的一種時。 建立相應數目的原型並複製它們可能比每次用合適的狀態手工執行個體化該類更方便一些。

參與者

1. Prototype 聲明一個複製自身的介面。

2. ConcretePrototype 實現一個複製自身的操作。

3. Client 讓一個原型複製自身從而建立一個新的對象。

原型模式的結構與使用

模式的結構中包括兩種角色:

•抽象原型(Prototype)

•具體原型(Concrete Prototype) 

模式的UML類圖:

實戰部分

例1】:實現一個複製介面,然後實現一個複製自身的操作並加以應用

1.抽象原型(Prototype): Prototype.java

public interface  Prototype {    public Object cloneMe() throws CloneNotSupportedException;} 

2.具體原型(Concrete Prototype)_1: Cubic.java

public class Cubic implements Prototype, Cloneable{      double  length, width, height;      Cubic(double a, double b, double c){            length = a;            width = b;            height = c;      }      public Object cloneMe() throws CloneNotSupportedException{            Cubic object = (Cubic)clone();             return object;      } }

2.具體原型(Concrete Prototype)_2 : Goat.java

import java.io.*;public class Goat implements Prototype,Serializable{       StringBuffer color;       public void setColor(StringBuffer c){             color = c;      }      public  StringBuffer getColor(){            return color;      }      public Object cloneMe() throws CloneNotSupportedException{             Object object = null;            try{                    ByteArrayOutputStream outOne = new ByteArrayOutputStream();                   ObjectOutputStream outTwo = new ObjectOutputStream(outOne);                   outTwo.writeObject(this);                        ByteArrayInputStream  inOne=                   new ByteArrayInputStream(outOne.toByteArray());                   ObjectInputStream inTwo = new ObjectInputStream(inOne);                   object=inTwo.readObject();             }           catch(Exception event){                   System.out.println(event);           }           return object;      }}

3.應用 Application.java

public class Application {    public static void main(String[] args) {        Cubic cubic = new Cubic(12, 20, 66);        System.out.println("cubic的長、寬和高: ");        System.out.println(cubic.length + "," + cubic.width + "," + cubic.height);        try {            Cubic cubicCopy = (Cubic)cubic.cloneMe();            System.out.println("cubicCopy的長、寬和高: ");            System.out.println(cubicCopy.length + "," + cubicCopy.width + "," + cubicCopy.height);        } catch(CloneNotSupportedException ex){}        Goat goat = new Goat();        goat.setColor(new StringBuffer("白色的山羊"));        System.out.println("goat是" + goat.getColor());        try {            Goat goatCopy = (Goat)goat.cloneMe();            System.out.println("goatCopy是" + goatCopy.getColor());            System.out.println("goatCopy將自己的顏色改變成黑色");            goatCopy.setColor(new StringBuffer("黑顏色的山羊"));            System.out.println("goat仍然是"+ goat.getColor());            System.out.println("goatCopy是"+ goatCopy.getColor());        } catch(CloneNotSupportedException ex){}    }}
原型模式的優點 

•當建立類的新執行個體的代價更大時,使用原型模式複製一個已有的執行個體可以提高建立新執行個體的效率。

•可以動態地儲存當前對象的狀態。在運行時刻,可以隨時使用物件流程儲存當前對象的一個複製品。

您還可能感興趣:

java設計模式系列:

java設計模式4--建造者模式(Builder)

java設計模式3--單例模式(Singleton)

java設計模式2--抽象原廠模式(Abstract Factory)

java設計模式1--Factory 方法模式(Factory Method) 

java設計模式0--設計模式簡介

java設計模式5--原型模式(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.