Java常用设计模式————原型模式(一)
介紹
????????原型模式(Prototype Pattern):用原型實例指定創建對象的種類,并通過拷貝這些原型創建新的對象。
????????原型模式用于創建重復的對象,同時又能保證性能。當直接創建對象的代價比較大時,則采用這種模式。(例如,一個對象需要在高代價的數據庫操作之后被創建,并結合緩存機制,在下一次請求時返回它的克隆對象,在需要的時候更新數據庫,以此來減少數據庫調用)。
????? ? 原型模式的核心就是原型類,原型類需要具備以下兩個條件:
????? ? ·實現Cloneable接口。
????? ? Java中的Cloneable接口,作用只有一個:在運行時通知虛擬機可以安全地在實現了此接口的類上使用clone()方法。在JVM中,只有實現了這個接口的類才可以被拷貝,否則在運行時會拋出CloneNotSupportedException異常。
????? ? ·重寫Object類中的clone()方法。
????? ? Object類中的clone()方法,作用是返回對象的一個拷貝,但是其作用域protected類型的,一般的類無法調用,因此,Prototype類需要clone()方法的作用域修改為public? 。
深拷貝與淺拷貝
《Java常用設計模式————原型模式(二)之深拷貝與淺拷貝》
應用場景
????????使用原型模式創建對象比直接new一個對象在性能上要好的多,因為Object類的clone方法是一個本地方法,它直接操作內存中的二進制流,特別是復制大對象時,性能的差別非常明顯。
????????使用原型模式的另一個好處是簡化對象的創建,使得創建對象就像我們在編輯文檔時的復制粘貼一樣簡單。
????????因為以上優點,所以在需要重復地創建相似對象時可以考慮使用原型模式。比如需要在一個循環體內創建對象,假如對象創建過程比較復雜或者循環次數很多的話,使用原型模式不但可以簡化創建過程,而且可以使系統的整體性能提高很多。
優缺點
優點:
1.將產品的創建過程封裝起來,客戶端不需要了解產品的具體創建流程。
2.性能提高,逃避構造函數的約束,尤其是那些很復雜的對象的時候。
3.可以在不修改其他代碼的情況下添加新的產品,符合“開閉原則”。
缺點:
1.配備克隆方法需要對類的功能進行通盤考慮,這對于新的類不一定容易,特別當一個類引用不支持串行化的間接對象,或者引用含有循環結構的時候。
2.必須實現一個特定接口。
3.每一個類都必須有一個clone方法,如果這個類的組成不太復雜的話還比較好,如果類的組成很復雜的話,如果想實現深度復制就比較困難了。
代碼實現
第一步:創建原型類
package design.pattern.prototype; /*** 原型模式實現類* * <br>類名:ConcretePrototype<br>* 作者: mht<br>* 日期: 2018年3月31日-上午10:14:00<br>*/ public class ConcretePrototype extends Prototype{public void show() {System.out.println("原型模式實現類...");} }第二步:實現原型類繼承
package design.pattern.prototype; /*** 原型類* <br>類名:Prototype<br>* 作者: mht<br>* 日期: 2018年3月31日-上午10:12:48<br>*/ public abstract class Prototype implements Cloneable{@Overrideprotected Object clone() {try {return super.clone();} catch (Exception e) {e.printStackTrace();}return null;} }測試
package design.pattern.prototype;public class Client {public static void main(String[] args) {ConcretePrototype cp = new ConcretePrototype();for (int i = 0; i < 10; i++) {ConcretePrototype c = (ConcretePrototype) cp.clone();c.show();}} }輸出結果:
原型模式實現類... 原型模式實現類... 原型模式實現類... 原型模式實現類... 原型模式實現類... 原型模式實現類... 原型模式實現類... 原型模式實現類... 原型模式實現類... 原型模式實現類...?
總結
以上是生活随笔為你收集整理的Java常用设计模式————原型模式(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程相关知识
- 下一篇: 计算机组成原理第二章数据,计算机组成原理