軟件設計模式——原型模式

一、定義

原型模式(Prototype Pattern)是用於創建重複的對象,同時又能保證性能。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。這種模式是實現了一個原型接口,該接口用於創建當前對象的克隆。當直接創建對象的代價比較大時,則採用這種模式。例如,一個對象需要在一個高代價的數據庫操作之後被創建。我們可以緩存該對象,在下一個請求時返回它的克隆,在需要的時候更新數據庫,以此來減少數據庫調用。

二、設計類圖

三、優缺點分析

優點:提高性能、逃避構造函數的約束。

缺點:

1、配備克隆方法需要對類的功能進行通盤考慮,這對於全新的類不是很難,但對於已有的類不一定很容易,特別當一個類引用不支持串行化的間接對象,或者引用含有循環結構的時候。

2、已有的類沒有寫相應的clone方法,較爲麻煩,必須實現 Cloneable 接口。

四、代碼實現

形狀實現了Cloneable接口 實現了克隆方法: 

public abstract class Shape  implements Cloneable{

	abstract void draw();

	@Override
	public Object clone(){
		try {
			return super.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return null;
	}
}

子類繼承並重寫draw()方法: 

public class Circle extends Shape {
	@Override
	void draw() {
		System.out.println("I am circle.");
	}
}
public class ShapeCache {
        //緩存對象
	private static Hashtable<String, Shape> shapeCacheTable = new Hashtable<>();
    
        //克隆
	public static Shape getCacheShape(String id) {
		return (Shape) shapeCacheTable.get(id).clone();
	}

	public static void loadCache() {
		Circle circle = new Circle();
		shapeCacheTable.put("1", circle);
	}
}

驗證測試: 

public class Main {
	public static void main(String[] args) {
		//加載緩存
		ShapeCache.loadCache();

		//從緩存中獲取對象並執行繪製的方法
		Shape shape1 = ShapeCache.getCacheShape("1");

		Shape shape2 = ShapeCache.getCacheShape("1");

		//判斷兩個對象是否相等 輸出不等 說明並不是傳值引用 ,兩個對象有自己的地址
		System.out.println(shape1 == shape2);
		
		shape1.draw();

	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章